Xml кодировка utf 8

Столкнулся с одним неприятным багом PHP при работе с XML с кодировкой UTF-8. Если воспользоваться функцией DOMDocument::loadXML.

Есть исходный xml-файл: 1.xml

Теперь хотим воспользоваться DOMDocument и подгрузить файл, далее дампим его содержимое на экран. В этом примере все будет работать на ура и результат будет идентичен файлу 1.xml.

Рассмотрим другую ситуацию, когда мы xml-данные как-то получаем, меняем, добавляем и в итоге передаем строку в функцию loadXML.

А на выходе получаем нижеследующее. Куда делись наши символы на русском? И исчезла кодировка UTF-8?

Решение: нужно добавить заголовок xml-файла с кодировкой. Надеюсь в версии PHP 6 они сделают поддержку UTF-8 получше.

XML документы могут содержать символы в различных международных кодировках.

Чтобы не возникало ошибок, необходимо указывать, какая кодировка используется в XML документе, либо сохранять файл в универсальной кодировке UTF-8.

Символьная кодировка

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

В компьютерных терминах символьную кодировку также называют символьным набором, символьной раскладкой, кодовым набором и кодом страницы.

Юникод

Юникод — это промышленный стандарт для символьной кодировки текстового документа. Он определяет (почти) все возможные международные символы по именам и числам.

Юникод имеет две разновидности: UTF-8 и UTF-16.

UTF = формат преобразования Юникода (анг. Unicode Transformation Format).

UTF-8 использует один байт (8 бит) для представления общепринятых символов и два (или три) байта для всех остальных символов.

UTF-16 использует два байта (16 бит) для большинства символов и три байта для всего остального.

UTF-8 — Веб-стандарт

UTF-8 — стандартная кодировка символов в сети Интернет.

UTF-8 считается кодировкой по умолчанию в HTML-5, CSS, JavaScript, PHP, SQL и XML.

Читайте также:  Pci ven 10de dev 1054 rev a1

Кодировка XML документа

Первая строка в XML документе называется прологом:

Пролог является необязательным и, как правило, содержит номер версии XML.

Кроме этого, он может содержать информацию о кодировке XML документа. Следующий пролог определяет кодировку UTF-8:

Стандартизация XML устанавливает, что все приложения XML должны понимать кодировки UTF-8 и UTF-16.

UTF-8 является кодировкой по умолчанию для XML документов без информации о кодировке.

Кроме этого, большинство систем приложений XML работают с такими кодировками, как ISO-8859-1, Windows-1252 и ASCII.

Ошибки XML

Очень часто XML документы создаются на одном компьютере, на сервер выгружается с другого, а в браузере отображаются на третьем компьютере.

Если кодировка некорректно интерпретируется всеми тремя компьютерами, то браузер отобразит бессмысленный набор символов, либо вообще выдаст сообщение об ошибке.

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

Заключение

Когда вы пишите XML документ:

  • Используйте текстовый редактор, который позволяет изменять кодировку документа
  • Убедитесь, что редактор настроен на использование нужной кодировки
  • Опишите используемую кодировку в соответствующей декларации
  • UTF-8 является самой безопасной кодировкой
  • UTF-8 является стандартом в сети Интернет

Файл формирующий XML в формате “windows-1251”, сам файл XML в формате UTF-8.

При вводе Латиницы все хорошо. При вводе кириллицы выдает ошибку:

Подскажите как обойти эти камни?

1 ответ 1

Прекрасная манера задавать вопросы.

"Иду в винный магазин, но когда поворачиваю налево, то всегда попадаю на помойку. Подскажите, как добраться до алкоголя?".

Читатель должен сам догадаться, откуда идет горемычный автор, где он сворачивает, и где вообще происходят описываемые события.

"Создаю XML файл. При вводе кирилицы выдает ошибку".

Читатель должен сам догадаться, что вводит автор, куда, и что имеется в виду под словами "ввод" и "кирилица".

Читайте также:  Rumows сортировочный центр где

При этом пример приводится не того кода, который выдаёт ошибку, а того, который работает нормально.

Ну ок, займемся гаданием.

Если "вводимые" данные прописаны прямо в скрипте, сохранённом в кодировке 1251, то разумеется, они вызовут ошибку. Поскльку данные в кодировке 1251 являются некорректными данными с точки зрения кодировки UTF-8. Следовательно, эти данные сначала надо перекодировать, используя функцию mb_convert_encoding()

Rate this post

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *