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”等内容来绕过它,我能做些什么来解决这个问题?

4

1 回答 1

0

这将捕获您列表中任何出现的作品,无论它位于消息中的哪个位置;可能过于严格,但可能会有所帮助:

function censor($message) {
  foreach($this->censor as $word){
    if(false !== stripos($message, $word)){
      return true;
    }
  }
  return false;
}
于 2012-08-10T03:22:44.043 回答