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

标签 php html xml utf-8 domdocument

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

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

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

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

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

最佳答案

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

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

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

关于php - 转储非 ASCII 字符时 DOMDocument 行为不一致的解释是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2001460/

相关文章:

javascript - 从 laravel echo 中调用 vue.js 函数时出错

css - float 的 div 有一个边距,打破了流动

html - 是否可以仅使用 UL/LI 和 CSS 制作此菜单?

xml - 我可以在 Django 中使用 XSLT 吗?

PHP preg_match 除单词外的任何字符

php - 每天自动更新数据库

php - 为什么我不能在 MongoDB 文档中存储关联数组?

html - 简单的 CSS 转换 - 没有任何效果

c# - LINQ to XML 中没有结果

python - 在 Python 中解析大型 XML 文档的最快方法是什么?