2011-06-06 39 views
1

好吧,我不是在正则表达式那么聪明,这里就是我只是试图做只有在不遵循放大器的情况下,全部替换为&。

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

The Sun & Mars are planets 

将保持不变,因为我们不需要编码&&再次

但是,如果我们将有

The Sun — big hot planet 

这应成为

The Sun — big hot planet 

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

回答

12

只是做两个换人:

  1. 更换&&
  2. 更换&&
+0

omg现在我真的需要睡觉..这真的解决了我的问题,并没有正则表达式需要,谢谢! – 2011-06-06 18:20:37

+0

不用担心,它发生在我们身上。随时upvote并点击复选标记,如果这对你有帮助:-) – 2011-06-06 18:23:12

+0

很好的简单的解决方案,谢谢! – gypsyDev 2017-09-25 04:02:16

0

嗯我认为解决这个问题的最好方法是使用php函数htmlspecialchars,在这里它的manual page。基本上你需要禁用doble_encode(在其上放置一个false),以便已经存在的html实体不会被再次解析。

+0

不,如果您已经存在html标记之间存在的编码问题,则这不起作用。上面的两个解决方案实际上会解决这个问题。一旦问题解决后,您可以使用htmlspecialchars进一步编码... – Amb3rL4nn 2016-05-15 21:00:42

7

您可以使用负向预测匹配“&”后面跟着“amp;”。

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

这一个也是好的,我正在寻找一种方式来做负面的超前,但基本手册并没有描述它..现在我知道了! – 2011-06-06 18:39:26

+0

这工作,虽然正则表达式肯定比字符串替换慢:-) – 2011-06-06 20:50:28

相关问题