Вы сказали, что XML-файл - UTF-8, но когда я загружаю его и открываю в текстовом редакторе, он автоматически определяет кодировку windows latin1
, и кавычки отображаются отлично.
Если я заставлю свой текстовый редактор использовать UTF-8, он отобразит сообщение об ошибке, поскольку в кодировке UTF-8 есть недопустимые символы.
Следовательно, ваши данные не UTF-8, это латиница 1. Вам нужно выяснить, где именно это происходит. Это может быть один или несколько из:
- это HTML-страница, на которой пользователь печатает содержимое в формате UTF-8?
Если нет, браузер будет отправлять латинские кавычки. Чтобы это исправить, тег first в вашем <head>
должен быть:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
...
</head>
каждый браузер правильно соблюдает настройку UTF-8 в HTML этой страницы?
Если вы укажете UTF-8, а страница содержит недопустимые символы в этой кодировке, некоторые браузеры могут решить использовать другую кодировку, несмотря на тег <meta>
. Как проверить это отличается в каждом браузере.
- это соединение MySQL при вставке в базу данных, настроенную на использование UTF-8?
Вам нужно использовать UTF-8 здесь, иначе MySQL может попытаться преобразовать кодировку для вас, часто повреждая их. Установите кодировку с помощью:
$database = 'xxxx';
$dbconnect = mysql_pconnect('xxxx', 'xxxx', 'xxxx');
mysql_select_db($database, $dbconnect);
mysql_query('SET NAMES utf8', $dbconnect);
таблица MySQL (и отдельный столбец) настроена на использование UTF-8?
Опять же, чтобы MySQL не выполнял свои собственные глючные преобразования, вам нужно убедиться, что он использует UTF-8 для таблицы, а также отдельный комментарий. Сделайте дамп структуры базы данных и проверьте:
CREATE TABLE `the_queue` (
...
) ... DEFAULT CHARSET=utf8;
А также убедитесь, что в столбцах нет ничего подобного:
`description` varchar(255) CHARACTER SET latin1,
- это соединение MySQL при чтении базы данных, настроенной на использование UTF-8?
Ваше соединение для чтения также должно быть utf8
. Так что дважды проверьте это.
вы делаете что-то в PHP, что не может обработать UTF-8?
В PHP есть некоторые функции, которые нельзя использовать со строками utf-8, так как они повреждают их. Одной из этих функций является htmlentities()
, поэтому всегда используйте htmlspecialchars()
. Самый простой способ проверить это - начать комментировать большие куски вашего кода, чтобы увидеть, где нарушается кодировка.