Ну, в основном, потому что введенная вами строка не является действительным 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 () для перевода иностранных символов.