PHP SimpleXMLElement 不会将引号转换为实体

use*_*053 2 php xml simplexml xml-entities

我正在编写一个 PHP 脚本来生成一些 xml 文档,但我在 SimpleXML 和引号方面遇到了一些问题。

如果我有这样的代码:

$xml = new SimpleXMLElement('<myxml />');
$xml->addChild('title','My Feed');
$xml->addChild('description','Entity data here - &amp; &quot; &apos;');
Run Code Online (Sandbox Code Playgroud)

如果我 print_r $xml obj 然后我得到这个:

print_r($xml);
SimpleXMLElement Object
(
  [title] => My Feed
  [description] => Entity data here - & " '
)
Run Code Online (Sandbox Code Playgroud)

似乎一旦在对象中,它就会使实体回到各自的角色。但是,当我在对象上调用 asXML() 以获取 XML 时,它向我显示了以下内容:

echo $xml->asXML();
<?xml version="1.0"?>
  <myxml>
  <title>My Feed</title>
  <description>Entity data here - &amp; " '</description>
</myxml>
Run Code Online (Sandbox Code Playgroud)

它使 & 返回一个实体,但它似乎将引号保留为字符。它不应该将它们全部转换为实体吗?

IMS*_*SoP 5

"'如果它们在属性值中,并且只是 XML 中的特殊字符。在元素的文本内容中,"或的含义没有歧义',因为要查找的下一个特殊标记是<开始或结束标记。

因此,虽然<foo bar="hello "world"" />是无效的XML,<foo>hello "world"</foo>是不是,所以没有逃脱被需要

(仅仅因为它不是必需的,并不意味着它不可能,所以可能有一个更完整的答案,为什么 SimpleXML 不至少保留你自愿放在那里的实体。)