2012-11-14 106 views
0

我知道我會得到很多asinine的評論,但我無法弄清楚這一點,無論我做什麼。我在這裏有一個功能Preg Match ^與php^

$filter = mysql_query("SELECT * FROM `filter`"); 
    $fil = mysql_fetch_array($filter); 
    $bad = $fil['filter']; 

$bword = explode(",", $bad); 
    function wordfilter($output,$bword){ 
    $badWords = $bword; 
$matchFound = preg_match_all("/(" . implode($badWords,"|") . ")/i",$output,$matches); 

if ($matchFound) { 
    $words = array_unique($matches[0]); 
    foreach($words as $word) { 
    $output = preg_replace("/$word/","*****",$output); 
    } 
} 
return $output; 
    } 

我知道不好的字過濾器是皺眉,但我的客戶已經要求這樣。

現在我在數據庫中有一個列表,這裏有幾個條目。

^ass$,^asses$,^asshopper,^cock$,^coon,^cracker$,^cum$,^dick$,^fap$,^heeb$,^hell$,^homo$,^humping,^jap$,^mick$,^muff$,^paki$,^phap$,^poon$,^spic$,^tard$,^tit$,^tits$,^twat$,^vag$,ass-hat,ass-pirate,assbag 

正如你所看到的,我對某些單詞使用了旋轉曲線和美元符號。

我遇到的問題是,與前三個單詞開頭ass它擋住了,即使我喜歡寫東西glassesgrasshoppers但一切都會過去的第3做工精細的話,我嘗試了這些前增加3項在這種情況下,這是問題,但不幸的是不是。

我寫這封信有什麼不對嗎?

+0

你應該看看開源解決方案的這個代替你自己發明的機制。 –

+0

@SalmanA我已經嘗試了很多開源腳本,但是沒有一個完全按照我需要的方式來執行 – kira423

+0

嘗試將您的正則表達式更改爲''/\b('bim">'/\b('badwords)'。 )\ b/i''並刪除數據庫中的'^'和'$'。 – Passerby

回答

1

從註釋擴展:

嘗試使用\b來檢測的話:

$matchFound = preg_match_all('/\b('.implode($badWords,"|").')\b/i',$output,$matches);