У меня есть следующий тестовый скрипт на моем сервере:
<?php echo "Test is: " . $_GET['test']; ?>
Если я назову его URL-адресом, например example.com/script.php?test=ɿ
(ɿ, являющимся многобайтовым символом), результирующая страница выглядит следующим образом:
Тест: É¿
Если я попытаюсь сделать что-либо со значением в $ _GET ['test'], например, сохранить его в базе данных mysql, у меня такая же проблема. Что мне нужно сделать, чтобы PHP правильно обработал это значение?
Вы сказали пользовательскому агенту, что ваш ответ 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?
Вкратце, вы должны проверить каждый шаг: из исходных исходных данных, кода, который затрагивает его, систем хранения, которые его сохраняют, и инструментов, которые вы используете для отображения и отладки.
Выполните следующие действия:
SET NAMES 'utf8'
при подключении к MySQL DB <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
в вашем HTML Вставляя 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>