为什么DOMDocument将UTF-8编码的变音符号转换为数字实体?

时间:2011-12-02 10:44:39

标签: php xml utf-8 domdocument

如果我在将字符串作为文本节点添加到DOMDocument树之前输出该字符串,那么我可以看到原始的UTF-8编码被保留。所有变音符号都是UTF-8编码的 - 当然。

然后我添加字符串并通过saveXML()输出DOM-tree-object,并且所有的变音符号都被它们各自的数字实体替换。

我创建了这样的DOMDocument:$xmlDoc = new \DOMDocument('1.0', 'UTF-8');

XML不应该只保留所有UTF-8编码的字符,只要它们不是特殊于XML的字符吗?

1 个答案:

答案 0 :(得分:2)

我不认为这是一个错误。 DOMDocument::loadXML()似乎只是用给定XML字符串中检测到的内容来覆盖内部版本和编码设置 - 实际上覆盖了DOMDocument constructor中设置的所有内容。

$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声明。 从头开始构建文档时使用构造函数参数。