Обработка значений Unicode в параметрах GET с помощью PHP - PullRequest
4 голосов
/ 30 января 2010

У меня на сервере есть следующий тестовый скрипт:

<?php
echo "Test is: " . $_GET['test'];
?>

Если я назову его с URL-адресом, подобным example.com/script.php?test=ɿ (многобайтовый символ ɿ), полученная страница будет выглядеть следующим образом:

Испытание: É¿

Если я попытаюсь что-то сделать со значением в $ _GET ['test'], например сохранить его в базе данных mysql, у меня возникнет та же проблема. Что мне нужно сделать, чтобы PHP правильно обрабатывал это значение?

Ответы [ 3 ]

4 голосов
/ 30 января 2010

Вы сказали агенту пользователя, что ваш HTTP-ответ - UTF-8?

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

Вы также можете убедиться, что ваша HTML-разметка также объявляет кодировку, например,

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Для вашей базы данных настроены ли ваши таблицы и настройки клиента mysql для UTF-8? Если вы проверяете свою базу данных с помощью клиента командной строки mysql, настроена ли ваша терминальная среда на UTF-8?

В двух словах, вы должны проверить каждый шаг: от необработанных исходных данных, кода, к которому они обращаются, систем хранения, которые его сохраняют, и инструментов, которые вы используете для их отображения и отладки.

1 голос
/ 30 января 2010

UTF-8 на всем пути ...


Следуйте инструкциям, а именно:

  • SET NAMES 'utf8' при подключении к БД MySQL
  • <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> в вашем HTML
0 голосов
/ 07 октября 2011

Вставив url в браузер, который содержит высокие символы utf8, браузер перекодирует символы utf8 в многобайтовую последовательность, соответствующую RFC 3986, и вы не получите utf8 символов в php.

НО, php будет правильно получать и отображать символы utf8 из URL, если страница, которая вызывает ваш URL, имеет кодировку utf8.

Попробуйте позвонить своему php для теста следующим образом:

<iframe src="example.com/script.php?test=ɿ" height="100" width="100" border="1"></iframe>
...