PHP база данных MySQL странные символы - PullRequest
6 голосов
/ 16 декабря 2009

Я пытаюсь вывести информацию о продукте, хранящуюся в базе данных MySQL, но она записывает некоторые странные символы, такие как ромб с вопросительным знаком внутри.

Я думаю, что это может быть проблема с кодировкой / UTF8, но я указал нужную кодировку:

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

Это правильно? Что я должен проверить?

Ответы [ 4 ]

20 голосов
/ 16 декабря 2009

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

mysql_query("SET NAMES UTF8");

перед любыми другими запросами. В противном случае, если символы появляются также в «рукописных» файлах, убедитесь, что файлы сохранены как UTF-8 в вашем редакторе. Вы также можете попробовать установить заголовок charset через PHP:

header('Content-type: text/html; charset=UTF-8');

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

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

Полагаю, вы хотите, чтобы результат был в utf8

  • сохранить ваш php скрипт в кодировке utf8
  • убедитесь, что ваш http-заголовок (или некоторые метатеги) говорит, что вывод utf8
  • все таблицы в MySql должны быть utf8
  • И последнее, но не менее важное: соединение между клиентом и сервером должно быть utf8. (Это может быть обработано где-то в настройке php.ini или с помощью следующего запроса к базе данных: SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'

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

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

В прошлый раз, когда у меня возникла такая проблема, решение было похоже на то, что сказал Тату Ульманен, но немного другое ...

Так что, если его решение не работает, попробуйте заменить

mysql_query("SET NAMES UTF8");

с

mysql_query("SET NAMES latin1");

Я говорю это, потому что набор символов по умолчанию в MySql - latin1, и это то, что используется большую часть времени ....

надеюсь, что это поможет ...

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