#php #mysql #character-encoding #collation
#php #mysql #кодировка символов #параметры сортировки
Вопрос:
У меня есть куча датского текста, взятого из базы данных MySQL на латинице-1, и он отображается правильно при повторении в PHP. Проблема начинается, когда мне нужно повторить некоторые другие датские символы, которые не взяты из базы данных.
То, что я делаю, на самом деле выводит заголовок
Content-Type: text/html; charset=iso-8859-1
также разрешить корректное отображение символов, не запрашиваемых запросом.
Проблемы в том, что когда я делаю это, запрашиваемые символы отображаются неправильно.
Комментарии:
1. вместо этого вам следует переключиться на utf-8
Ответ №1:
То, что данные хранятся в таблице сортировки latin-1, не означает, что они закодированы в latin-1. Это связано с тем, что MySQL не выполняет никакого перевода символов, когда настройка соединения SET NAMES
совпадает с настройкой сортировки.
Я подозреваю, что у вас есть несколько символов UTF8, хранящихся в базе данных latin1, что запутывает проблему.
Для получения дополнительной помощи, пожалуйста, не могли бы вы добавить подробности о:
- Установленная вами кодировка соединения MySQL
- Подробности о том, откуда берутся «не запрашиваемые» символы
Комментарии:
1. Не используйте
SET NAMES
ноmysql_set_charset
.2. что ж, это сработает, если вы используете адаптер MySQL по умолчанию. Я включил подробную информацию о различных методах в зависимости от адаптера в сообщение в блоге, которое я написал пару недель назад: webmonkeyuk.wordpress.com/2011/04/23 /…
Ответ №2:
Используйте Unicode. UTF-8 => правильный путь.
Итак, установите utf8_unicode_ci в базе данных, UTF-8 в качестве кодировки страницы и перед вашим запросом установите mysql_query («SET NAMES UTF8»);