2012-08-10 80 views
1

我真的需要一個好的壞詞過濾器爲我的腳本。我已經有了一堆壞詞。但我的問題是,它發現了壞詞,換言之,就像說「測試」是一個糟糕的詞,而你說「測試」它仍然將它算作一個壞詞。在我的第二次嘗試中,我修復了檢測詞,換句話說,但是人們可以通過說@test和'cusswordhere'來繞過它。先進的詞過濾器

有沒有什麼我可以做的,以解決這個問題?

我的代碼:

function censor($message) { 
      $badwords = $this->censor; //array containing bad words 
      $message = @preg_replace('[^A-Za-z0-9 ]','',strtolower(' '.$message.' ')); 
      foreach($badwords as $bad) { 
       $bad = trim($bad); 
       if(strpos($message.' ', $bad.' ')!==false) { 
        if(strlen($bad)>=2) { 
         return true; 
        } 
       } 
      } 

    } 

目前,它不檢測的話,換句話說,但你可以說這樣的東西@cusshere「cusshere」繞過它等,有什麼我可以做些什麼來解決這個問題?

+0

您已經刪除了像@和'''這樣的字符,那麼用戶怎麼能繞過這個? – 2012-08-10 03:21:54

回答

0

這將捕獲任何在您的列表中發生的作品,無論它出現在消息中的何處;可能太有限制,但可能會有幫助:

function censor($message) { 
    foreach($this->censor as $word){ 
    if(false !== stripos($message, $word)){ 
     return true; 
    } 
    } 
    return false; 
}