Регистрация Войти
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Проблема с кодировкой 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();
?>
.
Прокомментировать/Отблагодарить