2010-11-16 46 views
1

在下面的代碼我想,以取代普通的&符號「和」,而忽視了正被用作一個HTML實體(例如:")的一部分,與號註冊EXP替換&符號而不是HTML實體

我我已經測試了我的表情&(?!([\ w \ n] {2,7} |#[\ d] {1,4});)在http://www.gskinner.com/RegExr/,它與我想要的匹配。

但是,當我運行這段代碼時,結果是空白的。

$content = "" Apples & Oranges ""; 
$content = preg_replace("/&(?!([\w\n]{2,7}|#[\d]{1,4});)/g","and",$content); 

echo $content; 

我的方法有瑕疵嗎?或者我只是有一個語法問題?

回答

1

刪除g標誌,它應該工作正常。

注意,它似乎對我來說,你所期望的和符號是包圍的空間,所以下面可能是一個簡化的解決方案:

$content = preg_replace("/\s/&\s/"," and ",$content); 

雖然我知道這可能使文字拼寫錯誤造成的編碼錯誤。如果有空間不足。

+0

不真正做正確的事情,除非正確的事情是打算是一個壞主意。 – muhmuhten 2010-11-16 02:22:06

+0

刪除g允許代碼做我希望它做的事情(不管它是不是個壞主意) – Susan 2010-11-16 02:44:41

+0

它是否適用於字符串'「1&2&3」'?我認爲這會落在你想要的範圍內。 – muhmuhten 2010-11-16 02:50:12

1

你不能一直這樣做。你如何知道某人是否包括& amp;希望它真正地打印「& amp;」或者&符號?不要嘗試混合轉義...這種路徑存在跨站點腳本攻擊。

(而且奇怪的是,計算器也做編碼半,它打破了我的帖子。白癡。)

+0

它在後端/受控環境中,所以我知道需要什麼內容以及文字打印和放大並不是必需的。 – Susan 2010-11-16 02:46:30

1

PHP不知道G-變質,只是正則表達式後聲明中刪除G。這工作:

$content = "" Apples & Oranges ""; 
$content = preg_replace("/&(?!([\w\n]{2,7}|#[\d]{1,4});)/","and",$content); 

echo $content;