Проблемы с кодировкой иногда трудно отладить. Короче говоря, лучшее решение - буквально использовать UTF8 как кодировку везде. То есть каждый компонент стека вашего приложения.
Кажется, что ваша страница доставляется как ISO-LATIN-1 (отправляется через HTTP-заголовок с вашего веб-сервера), что приводит к тому, что браузеры используют latin1 или какой-либо эквивалент Windows, например windows-1252, даже если у вас могут быть элементы META в HEAD вашего HTML, сообщающие пользовательским агентам о необходимости используйте UTF8. Заголовок HTTP имеет приоритет. Убедитесь, что доставка других ваших форматов файлов (особенно .js) также является UTF8. Если ваши проблемы все еще возникают после настройки всего, что связано с клиентской стороной (HTML, JS, XHR и т. Д.) Для использования UTF8, вам придется начать проверку вашей серверной части на наличие проблем.
Это может включать такие простые проблемы, как файлы PHP, которые не соответствуют UTF8 (я бы сказал, что это очень маловероятно на серверах Linux), но обычно состоит из проблем с конфигурациями mysql (сервер и клиент), кодировкой по умолчанию для базы данных и таблицы (и сопоставлением) и правильным Настройки соединения. Проблемы также могут быть вызваны неправильными настройками конфигурации PHP ini или mbstring.
Примеры (не полные; здесь используется mysql как общий пример базы данных):
Конфигурация MySQL
[mysqld]
default_character_set = utf8
character_set_client = utf8
character_set_server = utf8
[client]
default_character_set = utf8
Обратите внимание, что эти настройки отличаются для mysql версий 5.1 и 5.5 и могут помешать запуску mysqld при использовании неправильной переменной. См. http://dev.mysql.com/doc/refman//5.5/en/server-system-variables.html и http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html. для получения дополнительной информации.
Вы можете проверить свои переменные mysql через CLI:
mysql> SHOW VARIABLES LIKE '%char%';
Variable_name Value
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
При создании баз данных и таблиц попробуйте использовать что-то вроде
CREATE DATABASE $db /*!40100 DEFAULT CHARACTER SET utf8 */
Настройки PHP.ini (уже должны быть по умолчанию):
default_charset = "utf-8"
Расширение PHP MB-String по умолчанию использует latin1 и его следует перенастроить, если он используется:
[mbstring]
mbstring.internal_encoding = UTF-8
mbstring.http_output = UTF-8
...some more perhaps...
Настройки веб-сервера (используемый в качестве примера Apache применим и к другим серверам):
# httpd.conf
AddDefaultCharset UTF-8
Исходные коды PHP могут использовать настройки заголовка, например:
header('Content-type: text/html; charset=UTF-8');
Настройки оболочки (bash):
# ~/.profile
export LC_CTYPE=en_US.UTF-8
export LANG=en_US.UF-8
Вышеупомянутый список представлен здесь только для того, чтобы дать вам представление о том, какие подводные камни могут поджидать вас в определенных ситуациях. Каждый компонент используемого вами веб-стека должен иметь возможность использовать UTF8 и должен быть правильно настроен для этого. Тем не менее, для решения большинства проблем обычно достаточно простого правильного HTTP-заголовка UTF8. Удачи! :-)
person
graste
schedule
24.07.2012