使用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 & OTHER THINGS</myElement>
或者有时:
<myElement/>
编辑:也许我应该补充一点,我的软件必须下载文件。因此,当我用Notepad ++打开xml文件时,我得到的结果如上所述。
无法真正弄清楚这个问题,感谢您的帮助。 谢谢。
答案 0 :(得分:2)
好,所以问题在于我实际上是用Notepad ++打开XML文件的,它显示了'&'实体而不是&符号。在XML解析器中打开文件在某种意义上“解决了”我的问题。
感谢Barmar(https://stackoverflow.com/users/1491895/barmar)让我注意到这一点,并感谢所有发表评论的人。
答案 1 :(得分:0)
&
必须被编码为&
,XML才有效。&
解码为&
&
在XML字符串中具有特殊含义,就像<
一样。它用于实体引用。根据实际的XML格式,这可以是Unicode代码点或命名实体。一个示例是(X)HTML中的
。这就是为什么&
必须在XML文档的大多数部分中进行编码的原因。 DOM扩展的XML序列化程序为您完成,XML解析器将解码。