避免逃避&在&

时间:2012-01-20 14:55:00

标签: php xml simplexml

我需要转换一些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在使用赋值运算符

时对其进行编码

1 个答案:

答案 0 :(得分:0)

虽然我确信有更好的方法,并且您只需要一次性转义,但这一行会将字符串中&的所有出现转换为&,除非它是然后是amp;

$str = preg_replace('/&(?!amp;)/','&', $str);