PHP filter_var () - FILTER_VALIDATE_URL

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 фильтр проверки.

6
задан Alix Axel 26 January 2010 в 01:51
поделиться

2 ответа

Таблица начинается здесь:
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 в любом месте. : (

4
ответ дан 8 December 2019 в 02:09
поделиться

Технически это недопустимый URL согласно разделу 5 RFC 1738. Браузеры автоматически кодируют символ ã в %C3%A3 перед отправкой запроса на сервер. Технически допустимый полный URL здесь следующий: http://pt.wikipedia.org/wiki/Guimar%C3%A3es Передайте его фильтру VALIDATE_URL, и он будет работать нормально. Фильтр проверяет только соответствие спецификации, он не пытается исправить/кодировать символы за вас.

39
ответ дан 8 December 2019 в 02:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: