Поскольку данные поступают из JSON, они должны быть закодированы в наборе символов Unicode, по умолчанию используется UTF-8 [Источники: Дуглас Крокфорд, RFC4627].
Это означает, что для того, чтобы сохранить не-ASCII-символ в вашей базе данных, вам нужно либо преобразовать кодировку входящих данных в набор символов вашей базы данных, либо (предпочтительнее) использовать набор символов Unicode для вашей базы данных. Самый распространенный набор символов Unicode — и тот, который я рекомендую вам использовать для этой цели, — это UTF-8.
Вероятно, ваша база данных настроена с использованием одного из наборов латинских символов (ISO-8859-*), и в этом случае вам, скорее всего, просто нужно будет изменить набор символов, используемый для вашей таблицы, и это не нарушит какие-либо из ваших существующих данных — при условии, что в настоящее время у вас нет записей, которые используют какие-либо символы за пределами нижних 128 символов. , Основываясь на ваших комментариях выше, вы должны иметь возможность внести это изменение с помощью phpMyAdmin - вам нужно будет убедиться, что вы изменили каждый существующий столбец, который вы хотите изменить явно, изменение набора символов таблицы/базы данных повлияет только на новые столбцы/ таблицы, созданные без указания набора символов.
Когда вы выводите данные клиенту, вам также нужно сообщить ему, что вы выводите кодировку UTF-8, чтобы он знал, как правильно отображать символы. Вы делаете это, добавляя ; charset=utf-8
к заголовку Content-Type:
, который вы отправляете вместе с текстовым содержимым.
Например, в начало PHP-скрипта, создающего HTML-код в кодировке UTF-8, вы должны добавить следующую строку:
header('Content-Type: text/html; charset=utf-8');
Также рекомендуется объявлять набор символов документа в самом документе. Это объявление должно стоять перед любыми не-ascii-символами, существующими в документе, поэтому рекомендуется поместить следующий тег <meta>
в качестве первого дочернего тега <head>
:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Если вы создаете XHTML с объявлением XML вверху, набор символов может быть объявлен там вместо использования тега <meta>
:
<?xml version="1.0" encoding="UTF-8" ?>
Помните, что использование определения набора символов в заголовке Content-Type:
не ограничивается text/html
— это имеет смысл в контексте любого типа MIME семейства text/*
.
Дополнительная литература: Что абсолютно необходимо знать каждому программисту о кодировках и наборах символов для работы с текстом
Также не забудьте проверить разметку.
person
DaveRandom
schedule
30.08.2012