Кодировки символов в PHP и MySQL - PullRequest
1 голос
/ 09 ноября 2009

Наш веб-сайт был разработан с метатегом, установленным на ...

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

Это прекрасно работает для M-тире и специальных кавычек и т. Д. Однако у меня есть проблема, когда данные вводятся в компонент CMS, который хранит данные в MySQL. Для параметров сортировки MySQL установлено значение UTF8_swedish_ci (я читал, что это нормально и должно быть по умолчанию при настройке в phpMySqlAdmin).

Проблема, которую я теперь получаю, заключается в том, что когда я выводю информацию из БД на страницу, символы Кодировка utf8, поэтому я запускаю их через php-функцию uft8_decode (). Я думал, что это исправит несовместимость, но я получаю не то, что ожидаю.

Когда я смотрю на данные в БД в текстовом поле (снова через phpMySqlAdmin), это выглядит так ...

Это - Это

Когда я смотрю на экран, он выглядит как ...

Это? Это

Я знаю, что могу попытаться найти / заменить их в БД или в тексте, но я надеюсь, что есть более простой способ сделать это программно.

Спасибо, Дон


Обновление:

По-прежнему существует проблема, которую, к сожалению, htmlentities () не устраняет.

У меня есть текст в файле, похожем на этот: мы (специальные). Моя сортировка MySQL - "latin1_swedish_ci" (по умолчанию). Если я изменю заголовок или мета на iso / utf, то один или другой прервется. W / utf-8 (’) черный бриллиант, но содержание БД в порядке. С iso, встроенный контент в порядке, но контент из БД имеет всевозможные символы и другие символы. Попытался изменить сопоставление MySQL на utf-8, но не увидел разницы.

Я решил изменить элементы вручную. Спасибо за любые другие предложения.

Ответы [ 3 ]

1 голос
/ 09 ноября 2009

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

SET NAMES UTF8
1 голос
/ 09 ноября 2009

Предполагая, что вы смогли правильно установить кодировку в своей базе данных, я рекомендую следующий подход:

  • Убедитесь, что заголовок Content-Type был правильно установлен сервер. Это можно сделать в php с помощью функции header.

    заголовок ('Content-Type: text / html; charset = iso-8859-1');

Обратите внимание, что это имеет приоритет и является самой простой информацией, которую нужно получить, поскольку пользовательским агентам не нужно анализировать ее.

  • Установить метатег в файле HTML.

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

Для получения дополнительной информации см .:

http://www.joelonsoftware.com/articles/Unicode.html

http://www.webstandards.org/learn/articles/askw3c/dec2002/

0 голосов
/ 09 ноября 2009

Мне кажется, что, несмотря на ваш метатег, веб-сервер отправляет заголовок, который устанавливает кодировку в UTF-8. Однако самый простой способ решения подобных проблем - это экранирование не-ASCII-символов в объектах HTML.

...