2012-08-10 73 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; 
}