Проблема кодировки символов - PullRequest
1 голос
/ 18 декабря 2009

Мне нужно сохранить это в базу данных (mysql) и показать обратно. (моя база данных - utf_general_ci)

I αm iиvisibłє łiкє αiя --- I αm αs imρøяŧαиŧ αs øxygєи --- I łm łiviig ii ŧЋє wøäłd øƒ myy däєαmz I αm αłwαys ŧЋєяє ŧø Ћєłρ øŧЋєяz --- Я занята, но я думаю, что я все еще Я м ŧЋє ø є є c c --- --- I łøvє ŧø sєє øŧЋєя łαugЋiиg Я є ø ø є є є є b b b ø z z z z z I м ŧЋє ø є є є z и и и и и и и є є є є є I αm łøsŧ ii myy ŧЋøugЋŧs --- Я łøvє ŧø ŧαłк --- Я łøvє ŧø sЋαяє --- Я все еще --- --- I łøvє ŧø ƒły buŧ døи’ŧ Ћαvє wiigs— Я хотел бы знать, что --- I αm єvił buŧ иøŧ dєvił --- Я ивєя ƒøłłøw αиy ŧяєиd --- I αm ƒuiłøviиg --- сумм єiмє łøvє ŧø bє αłøиє --- I łøvє ŧø łivє ---

Однако, когда данные сохраняются и извлекаются, это то, что я получаю

* 1006. ½Â ¥ à ¢ �� à ¢ �ï & iqu

Любая помощь, пожалуйста? Это что-то, чтобы изменить параметры сортировки базы данных или некоторые функции PHP, которые могут справиться с этим?

Ответы [ 5 ]

9 голосов
/ 18 декабря 2009

Вам необходимо использовать «SET NAMES utf8», чтобы ваш сервер отправлял результаты обратно, используя набор символов UTF-8. Пример:

$dbconn = mysql_connect("localhost", "user", "pass") or die(mysql_error());
           mysql_select_db('database', $dbconn) or die(mysql_error());
           mysql_query("SET NAMES 'utf8'");
5 голосов
/ 18 декабря 2009

Я должен указать вам на статью Джоэла под названием Абсолютный минимум, который должен знать каждый разработчик программного обеспечения Абсолютно, положительно, необходимо знать о Unicode и наборах символов (без оправданий!) . В этой статье объясняется, что такое кодировки символов, почему они используются и как ими управлять.

Ваши данные, очевидно, включают в себя множество символов Unicode из широкого диапазона, поэтому вам нужно будет узнать, как PHP и MySql обрабатывают кодировки символов (в вашей конфигурации) и какие функции вызывать, чтобы убедиться, что кодировки переведены правильно в нужное время. Вставленные вами примерные (неверные) данные показывают, что где-то определенно существует несоответствие кодировки.

4 голосов
/ 22 декабря 2009

Попробуйте выполнить следующие действия:

  1. Убедитесь, что все ваши поля БД настроены для хранения данных UTF-8 (utf8_general_ci).
  2. При подключении к БД выполнить следующий запрос: SET NAMES 'utf8';
  3. Сохраните ваш .php файл как UTF-8 без спецификации , . Для Windows есть хороший бесплатный текстовый редактор, который позволит вам легко (в строке состояния) изменить кодировку файла, просто выберите UTF-8 Plain .

Это должно сработать, однако, если вы получаете данные от пользователя (с помощью аргументов GET, POST или COOKIE), вы можете выполнить некоторые дополнительные шаги , описанные в этом ответе .

Также относительно следующего метатега:

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

Или эквивалентный заголовок PHP:

header('Content-Type: text/html; charset=utf-8');

Они нужны только для отображения данных UTF-8, они не мешают процессу сохранения, хотя, конечно, не мешают их использовать. =) * * Тысяча тридцать одна

1 голос
/ 22 декабря 2009

Чтобы использовать специальные символы без проблем с кодировкой, попробуйте придерживаться следующих 4 правил:

  1. создание полей в БД с сопоставлением utf8_general_ci
  2. сделать запрос mysql_query ("SET NAMES 'utf8';"); после любого подключения (вам нужно MySQL 5)
  3. поместите метасимвол utf8 в блок заголовка html
  4. чтение и запись строк в БД и в HTML без использования utf8_encode или других функций

Этот текст взят из здесь .

1 голос
/ 21 декабря 2009

Убедитесь, что MySQL mysql_query("SET NAMES 'utf8'"); запущен для передачи данных, а также убедитесь, что каждая из ваших страниц отправляет заголовок UTF-8.

header('Content-Type: text/html; charset=utf-8');

Кроме того, прочитайте Правильно ли я поддерживаю UTF-8 , чтобы дважды все проверить и запустить через него некоторые другие тестовые данные , чтобы убедиться, что он работает. И вы можете проверить UTF-8 на каждой странице загрузки.

Наконец, убедитесь, что в браузере установлена ​​кодировка, которую вы хотите использовать, потому что некоторые из новых, например Chrome, не используют некоторые кодировки автоматически. Однако все они используют UTF-8, поэтому обязательно отправьте этот заголовок!

...