PHP акцентирует проблему акцентов - PullRequest
5 голосов
/ 18 апреля 2011

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

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

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

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

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

РЕШЕНО

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

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

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

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

спасибо

Luca

Ответы [ 2 ]

3 голосов
/ 18 апреля 2011

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

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

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

Вещи для проверки:

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

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

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

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

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

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

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

SHOW CREATE TABLE myTable;

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

1 голос
/ 18 апреля 2011

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

...