Php 避免逃离&;in&;amp;

Php 避免逃离&;in&;amp;,php,xml,simplexml,Php,Xml,Simplexml,我需要转换一些xml文件。这是一个三遍的过程 在第一次通过时,我使用str_replace来逃避符号AND $cleanChild = str_replace("&", "&", $child); 问题出现在第二遍(和第三遍),如果我在第一遍转义后没有转义,我会得到一个未终止的实体引用警告 如果我再次逃跑,它会变成&转换为&;amp和&;amp;amp在第三个 为了解决这个问题,我正在更改&至&,然后返回至& $newChild = str

我需要转换一些xml文件。这是一个三遍的过程

在第一次通过时,我使用str_replace来逃避符号AND

$cleanChild = str_replace("&", "&", $child);
问题出现在第二遍(和第三遍),如果我在第一遍转义后没有转义,我会得到一个
未终止的实体引用
警告

如果我再次逃跑,它会变成
&转换为
&;amp
&;amp;amp在第三个

为了解决这个问题,我正在更改
&
&
,然后返回至
&

$newChild = str_replace("&", "&", $child);
$newChild = str_replace("&", "&", $newChild);
这是可行的,但有没有办法避免呢

另外,使用CDATA不是一个选项

谢谢

编辑

发现问题,请参阅

我正在使用
addChild()添加

而不是

$xml->addChild('detail',$newChild)

这样做

$xml->detail=$newChild


我不需要转义,因为simplexml在使用赋值运算符时对其进行编码。虽然我确信有更好的方法,而且您应该只需要转义一次,但此行将把字符串中出现的所有
&
转换为
&,除非后跟
amp

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

你想把什么转换成什么?为什么不在第三次传递时替换str_?因为我必须保存每次传递的结果。如果我不转义,它会给我一个警告,并忽略该元素中包含&@Akash ok的所有剩余文本,所以只在第一个元素上执行它。@DaveRandom我必须在每次转义时保存它。除非我转义,否则它不会保存该元素中的所有数据第一次转义是在几天前完成的,它将
&
转换为
&这是预期的结果。在第二次通过时,它抱怨
&并不会正确保存,除非我将其前后更改为
&
,然后再更改为
&,它只对
&而不是