我注意到在使用 PHP 的 DOMDocument
时有不同的“转储”行为的 saveXML()
和 saveHTML()
方法。下面是一个简单的转储版权符号 (©) 的例子。
<?<br/>$domDoc = new DOMDocument();<br/>
$domDoc->loadHTML("©");<br/>
echo $domDoc->saveHTML();<br/>
echo $domDoc->saveXML();<br/>
echo $domDoc->saveXML($domDoc);<br/>
?>
三个转储产生三个不同的输出:
第一个输出字符串 ©
第二个输出字符实体©
第三个输出版权符号的 UTF8 2 字节代码 ( U+00A9
)
为什么输出不同?有没有一种方法可以预测控制使用哪种方法?
最佳答案
我不是 PHP 专家,但对于前两个:
- saveHTML() 将使用 HTML 中可用的实体,其中
©
是一个 - saveXML() 将使用十六进制编码,因为 HTML 实体将不可用
对于第三个,文档说如果您提供一个节点,那么给定的节点是在没有 XML 声明的情况下编写的(即作为文档片段)。我只能猜测,在那种情况下,它决定采用 UTF-8 编码。此行为在文档中并不明显。
关于php - 转储非 ASCII 字符时 DOMDocument 行为不一致的解释是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2001460/