Переменная $ _GET с испорченной кодировкой - PullRequest
4 голосов
/ 16 декабря 2011

У меня много проблем с кодировкой на моем сайте.

Это моя проблема сейчас, если я перейду к analize.php?dialog=árbol с кодом:

<?
echo $_GET['dialog'];
echo "sabía";

на это я получаю:

sabía
sabía

Я использую ANSI, переход на UTF-8 прерывает оба. Я не понимаю, почему это происходит, также нет никакого кода выше этого. Меня не волнует, как они отображаются, поскольку этот файл используется только для извлечения данных из моей базы данных. Но мне нужно, чтобы $_GET отображался правильно, чтобы я мог включить его в запрос.

Как это можно сделать?

1 Ответ

5 голосов
/ 16 декабря 2011

Вы не можете отправить символ «í» в 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 представляет мягкий дефис и невидим.

Два возможных решения:

  1. useUTF-8 везде (рекомендуется!)

    • сохранить исходный код как UTF-8
    • вывести заголовок, который заставляет браузер интерпретировать сайт как UTF-8:

      header('Content-Type: text/html; charset=utf-8');
      
  2. преобразовать значения $_GET в Windows-1252 / ISO-8859-1 (или любую другую кодировку, которую вы хотите использовать на своем сайте), используяmb_convert_encoding или iconv (не рекомендуется)

    • даже в этом случае вы должны установить заголовок, который сообщает браузеру, какую именно кодировку вы используете

Короче говоря, вам нужно убедиться, что вы везде используете одну и ту же кодировку, и указать браузеру, какая именно кодировка.

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