在PHP中写入xml时删除&amp和string

Cat*_*lin 7 php xml

我试图使用DOMDocument写入包含&符号的链接的XML文件.当我尝试这个时,链接变为&在xml中.从而product=1&qty;=1成为product=1&qty;=1.

你能告诉我一种避免这种情况的方法吗?

Gor*_*don 5

&符应该像这样编码.改变它是错误的.

http://www.w3.org/TR/xml/

&符号(&)和左尖括号(<)绝不能以字面形式出现,除非用作标记分隔符,或用于注释,处理指令或CDATA部分.如果在其他地方需要,他们都必须用数字字符引用或字符串进行转义&amp;&lt;分别.

http://www.w3.org/TR/xhtml1/#C_12

在SGML和XML中,&符号("&")声明实体引用的开头(例如,&reg;注册商标符号"®").不幸的是,许多HTML用户代理默默地忽略了HTML文档中对&符号字符的错误使用 - 将看起来不像实体引用的&符号视为文字&符号.基于XML的用户代理不会容忍这种不正确的用法,并且任何错误地使用&符号的文档都不会"有效",因此不符合此规范.为了确保文档与历史HTML用户代理和基于XML的用户代理兼容,文档中用作文字字符的&符必须表示为实体引用(例如" &amp;").例如,当a元素的href属性引用带参数的CGI脚本时,它必须表示为http://my.site.dom/cgi-bin/myscript.pl?class=guest&amp;name=user而不是http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user


Boj*_*les 5

正如戈登所说,URI是用这种方式编码的。如果未将编码&&amp;,则XML文件将被弄乱-解析时会出错。当您从XML文件中取出字符串时,如果&amp仍然显示,则str_replace()如下所示:

$str = str_replace('&amp;', '&', $str)

或使用htmlspecialchars_decode()

$str = htmlspecialchars_decode($str);

使用的额外好处htmlspecialchars_decode()是它将解码字符串中可能存在的任何其他HTML。有关更多信息,请参见此处