2011-10-25 33 views
0

我有一個持有大量的禁詞在一個論壇上,有像表達的.txt文件:的preg_match與外部txt文件

//filterwords.txt
XXX
YYY
ZZZ

然後,我想使用preg_match來檢查傳入的文本$ str與這些單詞;如果不包括禁止的詞語,我們可以做些事情;否則,我們做的另一件事......我不知道的表情,我才知道: -

$filter_word = file("filterwords.txt") 

for ($i=0; $i< count($filter_word);$i++) 
{ 
    if(!preg_match($filter_word[$i],$str)) 
    { 
    echo "not ok!"; 
    exit; 
    } 
    else 
    { 
    echo "ok!!"; 
    exit; 
    } 
} 

能高手教教我怎麼寫的preg_match一部分?謝謝。

+0

在SO有很多關於褻瀆過濾器的問題。例如[這一個](http://stackoverflow.com/questions/273516/how-do-you-implement-a-good-profanity-filter)。你確定你找不到任何東西來幫助你嗎? –

+0

你正在製作[clbuttic的錯誤](http://thedailywtf.com/Articles/The-Clbuttic-Mistake-.aspx)。 – CodeCaster

+0

如果我不知道PHP的問題,我不能向願意教我的人尋求幫助嗎?你確定? – Ham

回答

1

如何:

<?php 
    $file = file_get_contents('filterwords.txt'); 
    $words = preg_split("#\r?\n#", $file, -1, PREG_SPLIT_NO_EMPTY); 

    #Added to escape metacharacters as mentioned by @ridgerunner 
    $words = array_filter("preg_quote", $words); 

    $pattern = "#\b(". implode('|', $words) . ")\b#"; 

    if(preg_match($pattern, $str)) 
    { 
     echo "bad word detected"; 
    } 
?> 

附:這是假設你有文字檢查$ str var

+0

幾乎是一個很好的答案(如果文件的大小是64KB),但你確實需要通過'preg_quote()'運行單詞表來轉義任何可能出現在「單詞」中的元字符。即插入行:'$ file = preg_quote($ file,'#')' – ridgerunner

+0

你是對的,但作爲一個簡單的例子與正常的話可以工作,雖然我會編輯實施你指出的變化評論。 – SERPRO

+0

如果文件較大,怎麼樣? > 5 MB <10 MB – gkns