我需要转换一些xml文件。它是一个3通过程。
在第一遍中我使用str_replace来逃避&符号
$cleanChild = str_replace("&", "&", $child);
问题出现在第二遍(和第三遍),如果我没有逃脱,因为它在第一遍中被转义我得到unterminated entity reference
警告。
如果我再次逃跑,它会在第一次传球时将&
变为&
,在第三次传球时变为&
。
要解决此问题,我将&
更改为&
,然后又回到&
$newChild = str_replace("&", "&", $child);
$newChild = str_replace("&", "&", $newChild);
这样可行,但无论如何要避免这种情况?
PS。使用CDATA不是一种选择。
由于
修改
发现问题,请参阅PHP's SimpleXML & Escaping that Ampersand
我使用addChild()
而不是
$xml->addChild('detail', $newChild);
这是
$xml->detail = $newChild;
并且我不需要转义因为simplexml在使用赋值运算符
时对其进行编码答案 0 :(得分:0)
虽然我确信有更好的方法,并且您只需要一次性转义,但这一行会将字符串中&
的所有出现转换为&
,除非它是然后是amp;
。
$str = preg_replace('/&(?!amp;)/','&', $str);