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


why does DOMDocument turn UTF-8 encoded umlauts into numeric entities?

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

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

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

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

我认为这不是一个bug。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声明。当您从头构建文档时,将使用构造函数参数。