Акцентированные символы в таблице mySQL

У меня есть некоторые тексты на французском языке (содержащие акцентированные символы, такие как «é»), которые хранятся в таблице MySQL, сортировка которой – utf8_unicode_ci (как таблица, так и столбцы), которую я хочу выводить на странице HTML5.

HTML-кодировка UTF-8 (<meta charset = "utf-8" />), а сами файлы PHP кодируются как «UTF-8 без спецификации» (я использую Notepad ++ в Windows). Я использую PHP5 для запроса базы данных и создания HTML.

Однако на странице вывода специальные символы (например, «é») отображаются искаженными и заменяются « ».

Когда я просматриваю базу данных (через phpMyAdmin), те же самые акцентированные символы отображаются просто отлично.

Что мне здесь не хватает?

(Примечание: изменение кодировки страницы (через меню веб-разработчиков Firefox) в ISO-8859-1 решает проблему … за исключением специальных символов, которые появляются непосредственно в файлах PHP, которые теперь повреждаются. Но в любом случае я лучше понять, почему он не работает как UTF-8, а не меняет кодировку, не понимая, почему она работает. ^^;)

Раньше я сталкивался с той же проблемой, и я сделал следующие

1) Используйте блокнот ++ (может почти адаптироваться к любой кодировке) или затмение и не забудьте сохранить или открыть его в UTF-8 без спецификации .

2) установите кодировку в заголовке PHP, используя header('Content-type: text/html; charset=UTF-8');

3) удалите лишние пробелы в начале и конце моих файлов PHP.

4) установите все мои таблицы и столбцы в utf8mb4_general_ci или utf8mb4_unicode_ci через utf8mb4_unicode_ci или любой клиент utf8mb4_unicode_ci который у вас есть. Сравнение двух кодировок доступно здесь

5) установите charset соединения mysql в UTF-8 (я использую PDO для подключения к базе данных)

  PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8" PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET utf8" 

или просто выполнить SQL-запросы перед извлечением любых данных

6) используйте метатег <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

7) используйте код языка для французского <meta http-equiv="Content-language" content="fr" />

8) измените атрибут lang элемента html на нужный язык

 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> 

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

9) Некоторые шрифты недоступны на клиентском ПК, вам нужно использовать шрифты Google, чтобы включить их в свой CSS

10) Не завершайте исходный файл PHP с помощью ?>

ЗАМЕТКА:

но если все, что я сказал выше, не работает, попробуйте настроить кодировку в зависимости от набора символов, который вы действительно хотите отобразить, для меня я задал все для SHIFT-JIS чтобы отобразить все мои японские символы, и это действительно отлично работает. Но использование UFT-8 должно быть вашим приоритетом

Это работает для меня

  1. Создайте свою базу данных utf8_general_ci
  2. Сохраните ваши файлы в N ++ как UTF-8 without BOM
  3. Положите $mysqli->query('SET NAMES utf8'); после подключения к базе данных в вашем файле PHP
  4. Поместите < meta charset="utf-8" /> в ваши HTML-файлы

Прекрасно работает.

Если ваш php.ini default_charset не установлен в UTF-8, вам необходимо использовать Content-type для определения ваших данных. Примените следующий заголовок в верхней части файла (ов):

 header("Content-type: text/html; charset=utf-8"); 

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

  • проблема с кодировкой сервера базы данных (проверьте кодировку вашего сервера)
  • проблема с кодировкой клиента базы данных (проверьте кодировку вашего соединения)
  • проблема с кодировкой таблицы базы данных (проверьте кодировку вашей таблицы)
  • проблема с кодировкой php по умолчанию (проверьте параметр default_encoding в параметрах.ini)
  • многобайтовая пропущенная конфигурация (см. параметры mb_string в параметрах.ini)
  • a <form> charset (проверьте, что он отправлен как utf-8)
  • a <html> charset problem (где no enctype не установлен в вашем html-файле)
  • Проблема Content-encoding: проблема (где неправильная кодировка отправляется Apache).

SET NAMES работал для меня.

Моя проблема была на одной из моих страниц редактирования, поле с иностранными символами не отображалось, на веб-страницах производства проблем не было.

  1. Введите что-то полные французские знаки в файле (php)
  2. Сохраните этот файл как UTF-8
  3. Вставьте строку под заголовком вашего веб-сайта

    header('Content-Type: text/html; charset=utf-8');

Страница (файл) должна выглядеть хорошо.

Если выглядит хорошо, пойдите для поведения mysql после (SET_NAMES).

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

У меня также были те же проблемы, что и у OP, в отношении французских акцентов в многоязычном приложении.

Но я впервые столкнулся с этой проблемой, когда мне пришлось передавать данные с французским акцентом в виде сегментов в вызовах AJAX.

Да, мы должны настроить базу данных для работы с UTF8. Но тот факт, что AJAX вызывает строки запроса (в моих сегментах, так как я использую CodeIgniter), мне пришлось просто кодировать французский текст.

Чтобы сделать это на стороне клиента, используйте функцию javascript encodeURI () с вашими данными.

И, чтобы отменить это в PHP, просто используйте urldecode($MyStr) где данные были получены как параметры.

Надеюсь это поможет.