Проблема с кодировкой: символ фунта £ отображается какусловное обозначение - PullRequest
2 голосов
/ 15 сентября 2010

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

Символ £ появляется в виде черного алмаза с вопросительным знаком через центр.

Я попытался изменить его на £ в базе данных, и он просто вывел & pound;

Я попытался заменить строку:

  $row['Information'] = str_replace("£", "£", $row['Information']);

Кажется, ничего не работает, есть идеи?

Ответы [ 2 ]

4 голосов
/ 15 сентября 2010

Я пытался изменить его на £ в базе данных

Не надо.База данных должна содержать необработанный текст, а не кодированный HTML.Время для HTML-кодирования (с использованием htmlspecialchars()) - это когда вы вставляете какой-то необработанный текст в HTML на этапе вывода шаблонов, а не раньше.Даже если бы вы сработали, вы бы исправили только одного персонажа;остальные 107025 не-ASCII-символов по-прежнему ломаются.

Очевидно, что здесь есть несоответствие кодировок;Вы должны убедиться, что везде используете одну и ту же кодировку (предпочтительно UTF-8), в частности:

  • кодировку, в которой вы сохранили файл PHP, если он содержит символы не ASCII;
  • кодировка, объявленная на странице вывода (Content-Type <meta> или header(), предпочтительно обеими; если вы используете только <meta> для ее установки и сервер настроен неправильно, он может установить свою собственную charset переопределяя вашу);
  • кодировка столбца в базе данных (каждый столбец имеет свой собственный порядок сортировки, поэтому просто установить его на таблицу неэффективно);
  • кодировка, используемая PHPпоговорить с MySQL.Это должно быть установлено с помощью mysql_set_charset.

К сожалению, ни один из этих параметров по умолчанию не установлен в UTF-8.

1 голос
/ 15 сентября 2010

Перед установкой связи с базой данных вам необходимо отправить запрос:

SET NAMES 'UTF-8'

Он сообщает базе данных использовать кодировку utf8 для всех запросов этого соединения.

...