【问题标题】:Saving '&' to XML Dom Document in PHP在 PHP 中将“&”保存到 XML Dom 文档
【发布时间】:2014-12-16 09:04:45
【问题描述】:

我的表单帖子的标题值设置为:

$title = "Company & Sons";

$xmlDoc = new DomDocument('1.0', 'utf-8');
$node = $xmlDoc->createAttribute('title');
$node->value = $title;

...

$completed = $xmlDoc ->saveXML();

当我检查保存的 XML 时,它保存为:

<title> Company &amp; Sons </title>

如何将其保存为&amp;amp;

【问题讨论】:

  • 如果它没有这样做,它就不是有效的 XML...
  • 尝试使用 &而是。
  • 它必须进行这种编码,因为&amp;amp; 是 xml 中的一个特殊字符。如果您的 xml 阅读器没有,您将不得不自己在您的 XML 中取消编码。但大多数人实际上会很好地解码它。
  • 评论者注意:设置&amp;amp; 没有问题。他想知道为什么它会被 DomDocument 自动编码!所以使用&amp;amp;不是他的解决方案!
  • w3.org/TR/xml/#syntax 看这里,你就知道为什么会这样了(转义)

标签: php xml


【解决方案1】:

如果&amp;amp; 字符按原样保存,您将不再拥有有效的 XML。

因此,具有特殊含义的实体在 XML 中被转义;因此&amp;amp;

要解决这个问题,您可以将您的字段声明为CDATA

<title>
    <![CDATA[
        Company & Sons
    ]]>
</title>

但是,您实际上不必担心在反序列化或读取 XML 时会转义 &amp;amp;。阅读器将正确地将转义值返回为其原始形式(与反序列化时将 JSON 中的 \u0001 unicode 转义转换为有效字符编码的方式非常相似)。

tl;dr:你的输出很好,不要惊慌。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 2017-09-09
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    相关资源
    最近更新 更多