Регистрация Войти
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Наш чат в Telegram для обмена идеями, проектами, мыслями, людьми в сфере ИТ г.Ростова-на-Дону: @it_rostov
Проблема с кодировкой UTF-8 для XML
Столкнулся с одним неприятным багом PHP при работе с XML с кодировкой UTF-8. Если воспользоваться функцией DOMDocument::loadXML.
Есть исходный xml-файл: 1.xml
<?xml version="1.0" encoding="UTF-8"?> <root> <name>Имя</name> <description>Description</description> </root>
Теперь хотим воспользоваться DOMDocument и подгрузить файл, далее дампим его содержимое на экран. В этом примере все будет работать на ура и результат будет идентичен файлу 1.xml.
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->load('1.xml');
echo $dom->saveXML();
Рассмотрим другую ситуацию, когда мы xml-данные как-то получаем, меняем, добавляем и в итоге передаем строку в функцию loadXML.
$xml = <<<XML <root> <name>Имя</name> <description>Description</description> </root> XML;
$dom = new DOMDocument('1.0', 'UTF-8'); $dom->loadXML($xml); echo $dom->saveXML();
А на выходе получаем нижеследующее. Куда делись наши символы на русском? И исчезла кодировка UTF-8?
<?xml version="1.0"?> <root> <name>Имя</name> <description>Description</description> </root>
Решение: нужно добавить заголовок xml-файла с кодировкой. Надеюсь в версии PHP 6 они сделают поддержку UTF-8 получше.
<?
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->loadXML('<?xml version="1.0" encoding="UTF-8"?>' . "\n" . $xml);
echo $dom->saveXML();
?>