0

不吉なコメントがたくさん寄せられることは承知していますが、何をしても理解できません。ここに機能があります

$filter = mysql_query("SELECT * FROM `filter`");
    $fil = mysql_fetch_array($filter);
    $bad = $fil['filter'];

$bword = explode(",", $bad);
    function wordfilter($output,$bword){
    $badWords = $bword;
$matchFound = preg_match_all("/(" . implode($badWords,"|") . ")/i",$output,$matches);

if ($matchFound) {
  $words = array_unique($matches[0]);
  foreach($words as $word) {
    $output = preg_replace("/$word/","*****",$output);
  }
}
return $output;
    } 

悪い言葉のフィルターが冒とくされていることは知っていますが、私のクライアントはこれを要求しました。

今、私はデータベースにリストを持っていますここにいくつかのエントリがあります。

^ass$,^asses$,^asshopper,^cock$,^coon,^cracker$,^cum$,^dick$,^fap$,^heeb$,^hell$,^homo$,^humping,^jap$,^mick$,^muff$,^paki$,^phap$,^poon$,^spic$,^tard$,^tit$,^tits$,^twat$,^vag$,ass-hat,ass-pirate,assbag

ご覧のとおり、特定の単語には曲折アクセント記号とドル記号を使用しています。

私が抱えている問題は、最初の3つの単語がass次のように書いても単語をブロックしていることですglassesが、最初の3つを超えるものgrasshoppersはすべて正常に機能します。これらの前に、3つのエントリを追加してみました。これが問題でした。 、しかし残念ながらそうではありません。

私がこれを書いた方法に何か問題がありますか?

4

1 に答える 1

1

コメントからの拡張:

\b単語の検出に使用してみてください。

$matchFound = preg_match_all('/\b('.implode($badWords,"|").')\b/i',$output,$matches);
于 2012-11-15T06:59:50.210 に答える