1

私のスクリプトには、適切な悪い単語フィルターが本当に必要です。私はすでに悪い言葉の配列を持っています。しかし、私の問題は、「テスト」は悪い言葉であり、「テスト」と言った場合でも、それを悪口としてカウントするなど、悪い言葉を検出したことでした。2 回目の試行で、単語の検出を別の言葉で修正しましたが、@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 に答える