在使用 PHP 的 DOMDocumentsaveXML()saveHTML() 方法时,我注意到了不同的“转储”行为。这是一个转储版权符号 (©) 的简单示例。
<?
$domDoc = new DOMDocument();
$domDoc->loadHTML("&copy;");
echo $domDoc->saveHTML();
echo $domDoc->saveXML();
echo $domDoc->saveXML($domDoc);
?>

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

第一个输出字符串&copy; 第二个输出字符实体&#xA9;第三个输出版权符号的 UTF8 2 字节代码( U+00A9 )

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

最佳答案

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

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

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

    10-07 12:06