Я пытаюсь разместить китайский текст на веб-сайте, но как только страница будет размещена в Интернете, вместо китайского текста я вижу ряд вопросительных знаков ?????????? ???????????
Я тестировал одну и ту же страницу на сервере WAMP, прежде чем размещать ее в Интернете (все страницы имеют расширение php), и китайские символы показывают, что это нормально, только когда страницы запрашиваются с интернет-хост-сервера, я вижу все вопросительные знаки ,
страница содержит (если это помогает):
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Если вы используете какую-либо базу данных, убедитесь, что вы запустили ее перед запросом базы данных (но после подключения):
mysql_set_charset("utf8");
Фактические заголовки HTTP-ответа всегда будут переопределять заголовки HTML <meta>
. Согласно вашему комментарию:
Я не слишком хорошо знаком с заголовками, вот заголовок ответа с рабочей страницы:
Дата: Чт, 24 июн 2010 05:24:23 GMT Сервер: Apache / 2.0.63 (Win32) PHP / 5.2.11 X-Powered-By: PHP / 5.2.11 Контент-длина: 3622 Keep-Alive: timeout = 15, max = 100 Подключение: Keep-Alive Content-Type: text / html; кодировка = UTF-8 200 OKи нерабочую страницу:
Дата: Чт, 24 июн 2010 05:26:54 GMT Сервер: Apache X-Powered-By: PHP / 5.2.12 Подключение: закрыть Передача-кодирование: chunked Content-Type: text / html 200 OK
См., Заголовок ответа HTTP на нерабочей странице имеет Content-Type
text/html
без какой-либо определенной кодировки. Это должен был быть text/html; charset=UTF-8
text/html; charset=UTF-8
.
Вы можете обойти это, добавив следующую строку в начало страницы PHP, прежде чем вы выпустите любой символ (HTML) в тело ответа.
header('Content-Type: text/html; charset=UTF-8');
Обновление: согласно комментариям, вышеуказанная причина, похоже, исключена. Следующая проверка; сам файл сохраняется как UTF-8? Щелкните правой кнопкой мыши и просмотрите источник. Есть ли и вопросительные знаки? Если это так, то во время FTP-передачи на хостинг что-то пошло не так. Выберите двоичный код вместо текста / ASCII или установите кодировку символов для переданных текстовых файлов в настройках клиента FTP и повторите попытку.
У меня была аналогичная проблема, и я смог ее решить.
У меня было содержание сайта, проходящего через PHP. Когда я рассматривал его как необработанный HTML-файл, он отображал бы символы правильно, но если бы я передал его через PHP (в моем случае, используя auto_prepend_file), это превратило бы символы в вопросительные знаки.
Решение заключалось в том, чтобы отключить detect_unicode в настройках PHP. В моем случае я только что редактировал файл .htaccess, чтобы включить строку:
php_value detect_unicode "0"
… и китайские персонажи начали правильно отображаться. Может быть эквивалентное решение, используя ini_set ().
Надеюсь это поможет.
Поскольку функции mysql_ * в PHP устарели с PHP 5.5.0, вот SQL, который вы можете выполнить, по существу, делает то же самое, что и mysql_set_charset:
SQL SET character_set_client = utf8
Это было ключом к тому, чтобы мои формы сохраняли текст Unicode в MySQL. Выполните этот SQL-запрос сразу после установления соединения с вашим сервером MySQL.