2015-02-10 15 views
1

我正在尋找建立在PHP中使用正則表達式的留言板的智能審查。基本上,我有一個數組中的壞詞(在正則表達式中)以及替代用於每個。我檢測字母之間的空格,以防止繞過檢查員,但我掛在某人身上,其中有任何由HTML標記包裹的壞字。所以,如果「狗屎」被阻止,我可以用任何數量的空格來捕捉「我的」,但是如果有人做了sh<b>i</b>t(我用粗體標記包裹),它就會通過。這顯然不可能發生,所以我被困在這裏。PHP /正則表達式的智能審查

這是我到目前爲止有:

$bad_words = array('/s\s*h\s*i\s*t/i'=>'s***'); 
$new_string = preg_replace(array_keys($bad_words), array_values($bad_words), $string); 
return $new_string; 

我已經用strip_tags(以爲包裝$字符串),但由於帖子內容的剩餘部分(不只是受到追捧的不好的話)可以包含HTML,這將在返回時破壞整個留言板帖子。任何幫助或提供的見解將不勝感激!

+0

不要去想這個正則表達式中的條款,直到你可以定義規則英語。你究竟會處理哪些案件?用一個字母代替我的字母是什麼?要麼 !爲我? $ S如何?字母間的標點符號如M * A * S * H?用英文寫出來,然後你可以考慮代碼。 – 2015-02-10 21:26:04

回答

3

事實是 - 無論你添加什麼來發現發誓的單詞,如果有人想找到解決方法,他們會。而越多嘗試和阻止它們,他們會得到更多的誤報。

即使你的方法現在,如果有人輸入「推送到github」,你會把它變成「PUS ***到github」。

老實說,你最好的選擇是抓住明顯的,並有一種方式來標記帖子爲淫穢。

一些很好的資源,看看在這個網站是:

How do you implement a good profanity filter?

"bad words" filter