4

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

<?
$domDoc = new DOMDocument();
$domDoc->loadHTML("&copy;");
echo $domDoc->saveHTML();
echo $domDoc->saveXML();
echo $domDoc->saveXML($domDoc);
?>

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

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

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

4

1 回答 1

1

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

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

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

于 2010-01-04T19:56:45.677 回答