почему DOMDocument превращает умлауты в кодировке UTF-8 в числовые объекты? - PullRequest
0 голосов
/ 02 декабря 2011

Если я выведу строку перед тем, как добавить ее в виде текстового узла в дерево DOMDocument, то я увижу, что исходная кодировка UTF-8 сохраняется. Все умлауты имеют кодировку UTF-8 - точно.

Затем я добавляю строку и выводю объект DOM-tree с помощью saveXML (), и все умлауты заменяются их соответствующими числовыми объектами.

Я создаю DOMDocument следующим образом: $xmlDoc = new \DOMDocument('1.0', 'UTF-8');

Разве XML не должен хранить все символы в кодировке UTF-8 в одиночестве, если они не являются специальными символами XML?

1 Ответ

3 голосов
/ 02 декабря 2011

Я не думаю, что это ошибка.DOMDocument::loadXML(), кажется, просто переопределяет внутреннюю версию и настройки кодирования с параметрами, обнаруженными в данной строке XML, - фактически перекрывая все, что было установлено в конструкторе DOMDocument .

$d = new DOMDocument('1.0', 'UTF-8');
$d->loadXML('<root><node/></root>');
var_dump(array(
    'encoding' => $d->encoding, // NULL
    'version'    => $d->xmlVersion // 1.0
));
$d->loadXML('<?xml version="1.0" encoding="ISO-8859-1"?><root><node/></root>');
var_dump(array(
    'encoding' => $d->encoding, // ISO-8859-1
    'version'    => $d->xmlVersion // 1.0
));

Поэтому, если вы используете DOMDocument::loadXML(), вы должны убедиться, что строка XML содержит допустимое объявление XML.Аргументы конструктора используются при создании документа с нуля.

...