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

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

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

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

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

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

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

Ответ 1

Я испытал эту же проблему раньше, и я сделал следующие

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

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

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

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

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 fonts, чтобы включить его в свой CSS

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

Примечание:

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

Ответ 2

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

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

Работает отлично.

Ответ 3

Если ваш 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> проблема с кодировкой (проверьте, что она отправлена ​​как utf-8)
  • a <html> проблема с кодировкой (где в вашем html файле не указан enctype)
  • a Content-encoding: (где неправильная кодировка отправляется Apache).

Ответ 4

УСТАНАВЛИВАЕМЫЕ НАЗЫВЫ работали для меня.

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

Ответ 5

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

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

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

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

Ответ 6

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

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

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

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

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

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

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