Почему FILTER_VALIDATE_URL не работает для персидских символов? - PullRequest
0 голосов
/ 13 мая 2018

Вот мой код :

$url = "http://localhost/myweb/qanda/1/";
var_dump(filter_var($url, FILTER_VALIDATE_URL));
//=> string(31) "http://localhost/myweb/qanda/1/"

Это известно как действительный URL и все хорошо. Но мой код не работает, когда в URL есть персидский символ :

$url = "http://localhost/myweb/qanda/1/س";
var_dump(filter_var($url, FILTER_VALIDATE_URL));
//=> bool(false)

Почему? И как я могу это исправить?

1 Ответ

0 голосов
/ 13 мая 2018

Ну, в основном, потому что введенная вами строка не является действительным URL в соответствии с RFC :

"Только буквенно-цифровые символы [0-9a-zA-Z], специальные символы" $ -_. +! * '(), "[Не включая кавычки - ed] и зарезервированные символы, используемые в их зарезервированных целях, могут использовать в незашифрованном виде в URL "

Ваш клиент (браузер) переведет вашего персонажа на %D8%B3, который действителен, и отправит его на сервер, но ваш клиент, вероятно, по-прежнему покажет س (мой показывает).

Таким образом, правильный URL будет проверен следующим образом:

$url = "http://localhost/myweb/qanda/1/%D8%B3";
var_dump(filter_var($url, FILTER_VALIDATE_URL));

Вы можете безопасно использовать urlencode () для перевода иностранных символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...