Почему функция не валидирует ссылки с русским текстом?

Рейтинг: 1Ответов: 1Опубликовано: 15.12.2014
return (filter_var($url, FILTER_VALIDATE_URL) !== false) ? true : false;

Если в качестве $url дать ссылку:

https://ru.stackoverflow.com/questions/198948/%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%BB%D0%B8%D1%81%D1%82%D0%B0-pascal

Функция вернет false.

В документации сказано:

Обратите внимание, что функция работает только с ASCII-ссылками

В это и причина, если русский текст?

Ответы

▲ 3Принят

Надо как-то так делать, только не так страшно:

$url = urlencode('http://hashcode.ru/questions/198948/удаление-динамического-листа-pascal');
$url = str_replace(array('%3A', '%2F'), array(':', '/'), $url);
print '<pre>'; var_dump(filter_var($url, FILTER_VALIDATE_URL));

ну и без протокола не работает.