UTF-8 проблема при сохранении в MySQL - PullRequest
1 голос
/ 10 ноября 2010

Мой сайт использует кодировку ISO 8859 1

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

когда пользователь публикует китайский символ, он будет сохранен в базе данных как & # 2 0 3 2 0; & # 2 2 9 0 9; который будет выводиться как китайский символ при получении.

Мне нужно настроить свой веб-сайт на UTF-8

когда пользователь публикует китайский символ, он будет сохранен как какой-нибудь забавный символ в mysql, а при получении некоторые символы верны, а некоторые неправильны.

мой вопрос, после того, как я установил UTF-8, как заставить mysql сохранить текст как # 2 0 3 2 0; & # 2 2 9 0 9; вместо фанки.

Я пытался использовать htmlentities. это не работает правильно.

мой скрипт использует

$message = htmlentities(strip_tags(mysql_real_escape_string($_POST['message']),'<img><vid>')); 

когда он сохраняется в mysql, он выглядит следующим образом & auml; & frac12; & Aring; & иен; & frac12; когда он извлекается для отображения, это выглядит примерно так: ä½ å ¥ ½ <---- это забавный символ, который ранее сохранялся в mysql </p>

Ответы [ 5 ]

5 голосов
/ 10 ноября 2010

Я видел много проблем, связанных с кодированием владелец должен немного погуглить перед публикацией

общий контрольный список:

  1. схема таблиц mysql для использования utf-8
  2. Подключение клиентов MySQL для использования utf-8 mysql --default-character-set=utf8
  3. php mysqli_set_charset до utf-8
  4. HTML кодирование в UTF-8
  5. putty, клиенты emac ... находиться в utf-8
2 голосов
/ 13 ноября 2010

Если вы пытаетесь перейти к UTF8 после того, как уже используете другую кодировку, попробуйте выполнить следующие действия:

  1. Запустите ALTER TABLE tablename CONVERT TO CHARACTER SET UTF8 на ваших таблицах

  2. Настройте MySQL по умолчанию на UTF8 или просто выполните запрос SET NAMES UTF8, как только вы установите соединение с базой данных.Вам нужно запускать его только один раз для каждого соединения, поскольку оно устанавливает соединение в UTF8.

  3. Вывести заголовок UTF8 перед доставкой содержимого в браузер.заголовок ('Content-Type: text / html; charset = utf-8');

  4. Включите метатег типа контента UTF8 на своей странице.meta http-equ = "Content-Type" content = "text / html; charset = utf-8"

Если вы выполните все эти шаги, все должно работать нормально.

2 голосов
/ 10 ноября 2010

Вы должны следовать совету ajreal по настройке кодировки в UTF-8.

Однако, исходя из его звучания, у вас уже могут быть данные, хранящиеся в базе данных, которые необходимо будет преобразовать.

Если ваш веб-сайт имеет одинаковую iso-8859-1, то, скорее всего, китайские символы хранятся в виде сущностей символов HTML, что означает, что данные не хранятся в неправильном кодировании и преобразование наборов символов не должно вызывать проблем. Если вы выполняете инструкции и обнаруживаете, что символы впоследствии появляются неправильно, это может быть связано с тем, что текст хранится в неправильном кодировании, и в этом случае могут быть предприняты шаги для исправления ситуации.

Наборы символов для существующего столбца могут быть преобразованы с использованием синтаксиса, подобного

ALTER TABLE TableName MODIFY ColumnName COLUMN_TYPE CHARACTER SET utf8 [NOT NULL]

, где COLUMN_TYPE является одним из CHAR(n), VARCHAR(n), TEXT, а квадратные скобки указывают, что NOT NULL является необязательным.

Редактировать

«Мой вопрос, после того как я установил UTF-8, как заставить mysql сохранить текст как # 2 0 3 2 0; & # 2 2 9 0 9; вместо фанки».

Это лучше всего решать на языке сценариев, а не в MySQL. Если вы используете PHP, вы можете использовать htmlentities() для этой цели.

1 голос
/ 03 июня 2011

Пользователь N перед вашими значениями.Нравится:

mysql_query ("insert into ".$mysql_table_prefix."links ( url, title) values ( N'$url ', N'$title');
0 голосов
/ 10 ноября 2010

Попытайтесь указать mysql использовать utf перед выполнением любого запроса. Вы можете поместить этот запрос в любой файл, который используется во всех файлах. замените "utf8_swedish_ci" на ваше сопоставление

$sql='SET NAMES "utf8" COLLATE "utf8_swedish_ci"';
mysql_query($sql);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...