これは、私のサイトで悪い言葉をフィルタリングするために使用するものです. お好みでお使いください。「iamabadword」ではなく「i am a badword」のみをフィルタリングするため、正しい方向に向けられるはずです。
function filterBadWords($str) {
$badWordsFile = "badwords.txt";
$badFlag = 0;
if(!is_file($badWordsFile)) {
echo "ERROR: file missing: ".$badWordsFile;
exit;
}
else {
$badWordsFH = fopen($badWordsFile,"r");
$badWordsArray = explode("\n", fread($badWordsFH, filesize($badWordsFile)));
fclose($badWordsFH);
}
foreach ($badWordsArray as $badWord) {
if(!$badWord) continue;
else {
$regexp = "/\b".$badWord."\b/i";
$badword_add_last_letter = $badWord.substr($badWord, -1);
$regexp_add_last_letter = "/\b".$badword_add_last_letter."\b/i";
if(preg_match($regexp,$str)) $badFlag = 1;
if(preg_match($regexp_add_last_letter,$str)) $badFlag = 1;
}
}
if(preg_match("/\[url/",$str)) $badFlag = 1;
return $badFlag;
}
また、ファイル badwords.txt は、次のような単なるファイルです。
badword1
badword2
badword3
編集:
HOST という単語だけが必要な場合は、次の関数を使用します。
function filterString($str) {
if(preg_match("/\bhost\b/i",$str)) return true;
return false;
}