Акцентированные символы в таблице 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
Страница (файл) должна выглядеть хорошо.
Если выглядит хорошо, перейдите здесь для поведения mysql после (SET_NAMES).
Ответ 6
Я знаю, что у вас уже есть ответ. Это здорово. Но странно ни один из этих ответов не разрешил мою проблему. Я хотел бы поделиться своим ответом на благо других, которые могут столкнуться с теми же проблемами.
У меня также были те же проблемы, что и у OP, в отношении французских акцентов в многоязычном приложении.
Но я впервые столкнулся с этой проблемой, когда мне приходилось передавать (французские акцентированные) данные в виде сегментов в вызовах AJAX.
Да, мы должны настроить базу данных для работы с UTF8. Но тот факт, что AJAX вызывает строки запроса (в моих сегментах, так как я использую CodeIgniter), мне пришлось просто кодировать французский текст.
Чтобы сделать это на стороне клиента, используйте Javascript encodeURI() с вашими данными.
И чтобы отменить это в PHP, просто используйте urldecode($MyStr)
, где данные были получены как параметры.
Надеюсь, что это поможет.