Php 避免逃离&;in&;amp;
我需要转换一些xml文件。这是一个三遍的过程 在第一次通过时,我使用str_replace来逃避符号ANDPhp 避免逃离&;in&;amp;,php,xml,simplexml,Php,Xml,Simplexml,我需要转换一些xml文件。这是一个三遍的过程 在第一次通过时,我使用str_replace来逃避符号AND $cleanChild = str_replace("&", "&", $child); 问题出现在第二遍(和第三遍),如果我在第一遍转义后没有转义,我会得到一个未终止的实体引用警告 如果我再次逃跑,它会变成&转换为&;amp和&;amp;amp在第三个 为了解决这个问题,我正在更改&至&,然后返回至& $newChild = str
$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我必须在每次转义时保存它。除非我转义,否则它不会保存该元素中的所有数据第一次转义是在几天前完成的,它将&
转换为&代码>这是预期的结果。在第二次通过时,它抱怨&代码>并不会正确保存,除非我将其前后更改为&
,然后再更改为&代码>,它只对&代码>而不是
或