转储非ASCII字符时DOMDocument的不一致行为的解释是什么?

时间:2010-01-04 19:03:40

标签: php html xml utf-8 domdocument

在使用PHP DOMDocument的{​​{1}}和saveXML()方法时,我注意到了不同的“转储”行为。这是一个倾销版权符号的简单示例(©)。

saveHTML()

三个转储产生三种不同的输出:

第一个输出字符串 <?
$domDoc = new DOMDocument();
$domDoc->loadHTML("&copy;");
echo $domDoc->saveHTML();
echo $domDoc->saveXML();
echo $domDoc->saveXML($domDoc);
?>

第二个输出字符实体&copy;
第三个输出版权符号(&#xA9;

的UTF8双字节代码

为什么不同的输出?有没有办法将可预测性控制用于哪种方法?

1 个答案:

答案 0 :(得分:1)

我不是PHP专家,但对于前两个:

  • saveHTML()将使用HTML中可用的实体,其中&copy;是一个
  • saveXML()将使用十六进制编码,因为HTML实体将不可用

对于第三个,文档说如果你提供一个节点,那么编写给定节点时没有XML声明(即作为文档片段)。我只能猜测在那种情况下它决定采用UTF-8编码。从文档中可以看出这种行为。