Вы не можете отправить символ «í» в URL, URL должны использовать подмножество кодировки ASCII.Поэтому URL-адрес кодируется в ?dialog=sab%C3%ADa
вашим браузером перед отправкой на сервер.%C3%AD
представляет два байта C3 AD
, которые являются кодировкой UTF-8 для символа "í".Вы можете подтвердить это с помощью var_dump($_SERVER['QUERY_STRING']);
.Это автоматически декодируется PHP, в результате получается последовательность байтов UTF-8 для «sabía» с кодировкой «í» с использованием двух байтов C3 AD
.
Ваш браузер интерпретирует эту последовательность байтов, используяКодировка Windows-1252 или ISO-8859-1.Байт C3
представляет «Ã» в этой кодировке, байт AD
представляет мягкий дефис и невидим.
Два возможных решения:
useUTF-8 везде (рекомендуется!)
- сохранить исходный код как UTF-8
вывести заголовок, который заставляет браузер интерпретировать сайт как UTF-8:
header('Content-Type: text/html; charset=utf-8');
преобразовать значения $_GET
в Windows-1252 / ISO-8859-1 (или любую другую кодировку, которую вы хотите использовать на своем сайте), используяmb_convert_encoding
или iconv
(не рекомендуется)
- даже в этом случае вы должны установить заголовок, который сообщает браузеру, какую именно кодировку вы используете
Короче говоря, вам нужно убедиться, что вы везде используете одну и ту же кодировку, и указать браузеру, какая именно кодировка.