【问题标题】:why does DOMDocument turn UTF-8 encoded umlauts into numeric entities?为什么 DOMDocument 将 UTF-8 编码的变音符号转换为数字实体?
【发布时间】:2012-01-11 09:52:00
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php xml utf-8 domdocument


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2016-10-14
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      • 2011-12-08
      • 2011-05-20
      相关资源
      最近更新 更多