&符号显示为“&”在XML文档中

时间:2019-06-04 08:35:56

标签: php xml entities ampersand

使用PHP 5.6(现在不能使用PHP 7.x)在XML文档中显示“&”字符时遇到了麻烦。

我尝试使用str_replace(),preg_replace和此处找到的其他一些功能: Unable to Parse ampersand in PHP string

此处:PHP not have a function for XML-safe entity decode? Not have some xml_entity_decode?

我还注意到,在5.2.x(https://bugs.php.net/bug.php?id=39521)中,“&”字符是一个问题,尽管我认为此问题已得到解决。

这里有一些我尝试做的例子:

$string = "SOMETHING & OTHER THINGS";
$string = str_replace('&', '&' $string);
$element = $domDocument->createElement('myElement', $string);
$rootElement->appendChild($element);

当我发现该错误时,我尝试过:

$string = "SOMETHING & OTHER THINGS";
$string = str_replace('&', '&' $string);
$element = $domDocument->createElement('myElement');
$element->appendChild( $domDocument->createTextNode($string) );
$rootElement->appendChild($element);

我期望的是:

<myElement>SOMETHING & OTHER THINGS</myElement>

我得到了什么

<myElement>SOMETHING &amp; OTHER THINGS</myElement>

或者有时:

<myElement/>

编辑:也许我应该补充一点,我的软件必须下载文件。因此,当我用Notepad ++打开xml文件时,我得到的结果如上所述。

无法真正弄清楚这个问题,感谢您的帮助。 谢谢。

2 个答案:

答案 0 :(得分:2)

好,所以问题在于我实际上是用Notepad ++打开XML文件的,它显示了'&'实体而不是&符号。在XML解析器中打开文件在某种意义上“解决了”我的问题。

感谢Barmar(https://stackoverflow.com/users/1491895/barmar)让我注意到这一点,并感谢所有发表评论的人。

答案 1 :(得分:0)

  1. &必须被编码为&amp;,XML才有效。
  2. XML解析器会将&amp;解码为&

&在XML字符串中具有特殊含义,就像<一样。它用于实体引用。根据实际的XML格式,这可以是Unicode代码点或命名实体。一个示例是(X)HTML中的&nbsp;。这就是为什么&必须在XML文档的大多数部分中进行编码的原因。 DOM扩展的XML序列化程序为您完成,XML解析器将解码。