替换所有&与&只有不跟着放大器;

时间:2011-06-06 18:16:15

标签: php regex preg-replace entities

好吧,我在regexp中并不聪明,这就是我想做的事情

基本上,我有一个已经编码实体的字符串,但我需要再次编码所有实体,除了&实体,所以如果我们有一个字符串

The Sun & Mars are planets

它会保持不变,因为我们不需要再次在&中对&进行编码

但如果我们有

The Sun — big hot planet

这应该成为

The Sun — big hot planet

我知道这很愚蠢,但这就是一个解析器想要的东西..

3 个答案:

答案 0 :(得分:13)

只做两次换人:

  1. &替换为&
  2. &替换为&

答案 1 :(得分:8)

你可以使用负向前瞻来匹配“&”没有跟“amp;”。

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

答案 2 :(得分:0)

嗯,我认为解决这个问题的最佳方法是使用php函数htmlspecialchars,这里是manual page。基本上你需要禁用doble_encode(在它上面添加一个假的),这样就不会再次解析现有的html实体了。