Проблема с акцентами в кодировке PHP

У меня есть форма на моей странице для пользователей, чтобы оставить комментарий.

В настоящее время я использую эту кодировку:

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

но извлечение комментария из акцентов БД отображается неправильно ( Ex. è =>è ).

Какие параметры мне следует учитывать для правильной обработки акцентов?

РЕШЕНО

  • изменил метатег на charset='utf-8'

  • изменен набор символов Mysql (комментарии ALTER TABLE CONVERT TO CHARACTER SET utf-8)

  • изменен набор символов соединения как при вставке записей, так и при извлечении ($ conn->query('SET NAMES utf8'))

Теперь акценты отображаются правильно

Благодарность

Лука


person luca    schedule 17.04.2011    source источник
comment
Ваш вопрос побудил меня написать сообщение в блоге о кодировке символов: webmonkeyuk.wordpress.com/2011/04/23/   -  person James C    schedule 23.04.2011
comment
Моя проблема была связана с отсутствием SQL-запроса SET NAMES. Та   -  person Aran    schedule 25.09.2012


Ответы (2)


Набор символов ISO-8859-1 предназначен только для латинских символов. Попробуйте UTF-8 и убедитесь, что база данных, из которой эти символы поступают, также является столбцами UTF-8.

person Zach Rattner    schedule 17.04.2011

Наборы символов могут быть сложными и трудными для отладки, когда речь идет о веб-приложениях LAMP. На каждом из этапов, когда одна часть программного обеспечения взаимодействует с другой, существует вероятность неправильного преобразования кодировки или неправильного хранения данных.

Места, на которые вам нужно обратить внимание: - Между браузером и веб-сервером (который вы уже перечислили) - Между PHP и сервером MySQL.

Перечисленный вами символ выглядит как обычный европейский символ, который будет включен в кодировку ISO-8859-1.

Что нужно проверить:

  • даже если вы указываете набор символов в метазаголовке, посмотрите в своем браузере, чтобы убедиться, какой набор символов браузер фактически использует. Если вы указали это, браузер должен использовать эту кодировку для отображения/просмотра страницы, но в тех случаях, когда я видел, что он пытался автоматически определить правильную кодировку и терпел неудачу. В большинстве браузеров есть меню «Кодировка» (возможно, в разделе «Просмотр»), которое позволяет вам выбрать кодировку. Убедитесь, что он говорит ISO-8859-1 (западноевропейский).
  • MySQL может с радостью поддерживать преобразование набора символов, если это необходимо, но в большинстве случаев вы хотите, чтобы ваши таблицы и клиентское соединение были настроены на использование одной и той же кодировки. При такой настройке MySQL не будет пытаться выполнять какое-либо преобразование кодировки, а просто будет записывать данные, которые вы вводите, байт за байтом в таблицу. При чтении это будет выглядеть так же, байт за байтом.

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

Чтобы отладить эти проблемы, вы должны быть действительно уверены в том, что клиент/консоль, которую вы используете, также выполняет какое-либо преобразование, иногда самый безопасный способ - это получить данные в шестнадцатеричном редакторе, где вы можете быть уверены, что ничего больше не возится. с любым переводом.

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

Запустите из соединения, которое создает ваше веб-приложение (а не из какого-либо другого клиента MySQL):

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

Запустите из любого клиента MySQL:

SHOW CREATE TABLE myTable;

(где myTable — это таблица, из которой вы читаете/записываете данные)

person James C    schedule 17.04.2011