2011-06-06 49 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

相關問題