当ブログには、掲示板を設置しています。
PHPで書いている自前の掲示板なのですが、ここのところ宣伝やら英語の訳分からんスパム投稿などで困っていました。
そこで、簡単な仕組みで、特定のキーワードを含む投稿を禁止するコードを書いてみた。
簡易的なスパムフィルターの導入といったところです。
以下、そのコード。
// NGワード定数(禁止ワードを、半角「,」で区切って指定)
define(NGWORD, "出会い,カジノ,風俗,ギャンブル");
/*
* 投稿ブロック関数
* $post : POSTされたフォームフィールド。
* $ng : NGWORD(半角「,」で区切られた禁止ワードの定数)
*/
function post_block($post, $ng) {
$ngs = split(",", $ng);
foreach ($ngs as $n) {
if (strpos($post, $n) !== FALSE) {
exit();
}
}
}
/*
* サンプルコード
* コメントを投稿するフォームのフィールド名がcommentの場合。
*/
post_block($_POST['comment'], NGWORD);
禁止ワードを、「,」(半角コンマ)で区切って設定し、POSTされたフォームフィールドと禁止ワードを引数にとるpost_block関数を定義。
post_block関数では、禁止ワード定数(NGWORD)を「,」で分割して配列にした後、POSTされた文字列に、禁止ワードが出現しないかどうかをstrposで判定し、出現したらexitでスクリプト停止するようにしてます。
POST情報を受け取り処理を行うファイルの先頭で、post_block関数を呼び出すようにすればOK。
とりあえず設置して3日ほど経ちますけど、今のところスパム投稿を無事にブロックできているみたいです。
掲示板の書き込みでなにか不具合がありましたら、お手数ですけどご連絡くださるとありがたいです。