FILTER_VALIDATE_URL
фильтр, кажется, испытывает некоторые затруднения при проверке URL не-ASCII:
var_dump(filter_var('http://pt.wikipedia.org/wiki/', FILTER_VALIDATE_URL)); // http://pt.wikipedia.org/wiki/
var_dump(filter_var('http://pt.wikipedia.org/wiki/Guimarães', FILTER_VALIDATE_URL)); // false
Почему последний URL правильно не проверен? И каковы возможные обходные решения? Выполнение PHP 5.3.0.
Я также хотел бы знать, где я могу найти исходный код FILTER_VALIDATE_URL
фильтр проверки.
Таблица начинается здесь:
http://svn.php.net/viewvc/php/php-src/trunk /ext/filter/logical_filters.c?view=markUp
и фактически сделан в /trunk/ext/standardard/url.ch
At первого взгляда, я не вижу ничего, что намеренно отказывается от персонажей без ASCII Так вероятно, просто не хватает поддержки Unicode. PHP не хорош в обработке персонажей не ASCII в любом месте. : (
Технически это недопустимый URL согласно разделу 5 RFC 1738. Браузеры автоматически кодируют символ ã в %C3%A3 перед отправкой запроса на сервер. Технически допустимый полный URL здесь следующий: http://pt.wikipedia.org/wiki/Guimar%C3%A3es Передайте его фильтру VALIDATE_URL, и он будет работать нормально. Фильтр проверяет только соответствие спецификации, он не пытается исправить/кодировать символы за вас.