У меня есть некоторые тексты на французском языке (содержащие акцентированные символы, такие как «é»), которые хранятся в таблице 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
должно быть вашим приоритетом
Это работает для меня
utf8_general_ci
UTF-8 without BOM
$mysqli->query('SET NAMES utf8');
после подключения к базе данных в вашем файле PHP < meta charset="utf-8" />
в ваши HTML-файлы Прекрасно работает.
Если ваш php.ini
default_charset
не установлен в UTF-8, вам необходимо использовать Content-type
для определения ваших данных. Примените следующий заголовок в верхней части файла (ов):
header("Content-type: text/html; charset=utf-8");
Если у вас все еще есть проблемы с кодировкой, причиной может быть одно из следующих:
default_encoding
в параметрах.ini) <form>
charset (проверьте, что он отправлен как utf-8) <html>
charset problem (где no enctype не установлен в вашем html-файле) Content-encoding:
проблема (где неправильная кодировка отправляется Apache). SET NAMES работал для меня.
Моя проблема была на одной из моих страниц редактирования, поле с иностранными символами не отображалось, на веб-страницах производства проблем не было.
Вставьте строку под заголовком вашего веб-сайта
header('Content-Type: text/html; charset=utf-8');
Страница (файл) должна выглядеть хорошо.
Если выглядит хорошо, пойдите для поведения mysql после (SET_NAMES).
Я знаю, что у вас уже есть ответ. Замечательно. Но странно ни один из этих ответов не разрешил мою проблему. Я хотел бы поделиться своим ответом на благо других, которые могут столкнуться с теми же проблемами.
У меня также были те же проблемы, что и у OP, в отношении французских акцентов в многоязычном приложении.
Но я впервые столкнулся с этой проблемой, когда мне пришлось передавать данные с французским акцентом в виде сегментов в вызовах AJAX.
Да, мы должны настроить базу данных для работы с UTF8. Но тот факт, что AJAX вызывает строки запроса (в моих сегментах, так как я использую CodeIgniter), мне пришлось просто кодировать французский текст.
Чтобы сделать это на стороне клиента, используйте функцию javascript encodeURI () с вашими данными.
И, чтобы отменить это в PHP, просто используйте urldecode($MyStr)
где данные были получены как параметры.
Надеюсь это поможет.