проблемы с кодировкой UTF-8 в PHP - PullRequest
2 голосов
/ 16 мая 2010

Символы, которые я получаю из URL, например, www.mydomain.com/?name=john, были в порядке, если они не были на русском языке.

Если бы они были на русском языке, я получал ' '.

Поэтому я добавил $ name = iconv ("cp1251", "utf-8", $ name); и теперь он отлично работает для русских и английских символов, но портит другие языки. :)))

Например, «Янис» (по-латышски), который хорошо работал до iconv, теперь превращается в «Янис».

Есть идеи, если есть какой-нибудь универсальный кодировщик, который будет работать с обоими языками кириллицы и не испортить другие языки?

Ответы [ 3 ]

3 голосов
/ 16 мая 2010

Почему бы вам не использовать UTF-8 со всеми файлами и процессами?

2 голосов
/ 16 мая 2010

На самом деле это сводится к проблеме того, как кодируется URL. Если вы щелкнете ссылку на данной странице, браузер будет использовать кодировку страницы для отправки запроса, но если вы введете URL-адрес непосредственно в адресную строку браузера, поведение будет каким-то образом неопределенным, поскольку на кодировка для использования (Firefox предоставляет переключатель about:config для использования URL-адресов в кодировке UTF-8).

Помимо использования некоторого определения кодировки, невозможно узнать кодировку, используемую с URL-адресом в данном запросе.

EDIT:

Просто для резервного копирования того, что я сказал выше, я написал небольшой тестовый скрипт, который показывает поведение по умолчанию пяти основных браузеров (в моем случае Mac OS X - Windows Vista через Parallels в случае IE):

$p = $_GET['p'];
for ($i = 0; $i < strlen($p); $i++) {
    // this displays the binary data received via the URL in hex format
    echo dechex(ord($p[$i])) . ' ';
}

Вызов http://path/to/script.php?p=äöü ведет к

  • Safari (4.0.5): c3 a4 c3 b6 c3 bc
  • Firefox (3.6.3): c3 a4 c3 b6 c3 bc
  • Google Chrome (5.0.375.38): c3 a4 c3 b6 c3 bc
  • Опера (10.10): e4 f6 fc
  • Internet Explorer (8.0.6001.18904): e4 f6 fc

Очевидно, что первые три используют URL-адреса в кодировке UTF-8, в то время как Opera и IE используют ISO-8859-1 или некоторые его варианты. Заключение : вы не можете быть уверены, что такое кодировка текстовых данных, отправляемых через URL.

1 голос
/ 16 мая 2010

Похоже, проблема в кодировке файла, вы всегда должны использовать UTF-8 без спецификации в качестве предпочтительной кодировки для файлов .php, таких редакторов кода, как Intype позвольте вам легко указать это (UTF-8 Plain).

альтернативный текст http://i48.tinypic.com/ok4a4k.png

Кроме того, добавьте следующий код в ваши файлы перед любым выводом:

header('Content-Type: text/html; charset=utf-8');

Вы также должны прочитать Абсолютный минимум, который должен знать каждый разработчик программного обеспечения Абсолютно, положительно, необходимо знать о Юникоде и наборах символов (без оправданий!) от Джоэла Спольски.

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