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 - & " '');
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 - & " '</description>
</myxml>
Run Code Online (Sandbox Code Playgroud)
它使 & 返回一个实体,但它似乎将引号保留为字符。它不应该将它们全部转换为实体吗?
"'如果它们在属性值中,并且只是 XML 中的特殊字符。在元素的文本内容中,"或的含义没有歧义',因为要查找的下一个特殊标记是<开始或结束标记。
因此,虽然<foo bar="hello "world"" />是无效的XML,<foo>hello "world"</foo>是不是,所以没有逃脱被需要。
(仅仅因为它不是必需的,并不意味着它不可能,所以可能有一个更完整的答案,为什么 SimpleXML 不至少保留你自愿放在那里的实体。)