• ベストアンサー

掲示板へ英語による書き込みを弾く設定について

現在"PHPBB"というフォーラムスクリプトを運営しております しかし、このスクリプトを狙った海外からのスパマーが多く 困っております そこで、投稿の際にひらがなが含まれない 投稿はブロックするようにしました 記述は以下のようになります # check word $chkmsg = ( !empty($HTTP_POST_VARS['message']) ) ? $HTTP_POST_VARS['message'] : ''; if (strlen($chkmsg) != 0) { if (mb_convert_kana($chkmsg, "C") == $chkmsg) { message_die(GENERAL_MESSAGE, "ひらがなが見当たりません<br>詳細は master にお問合せください"); } $chkword = @file("chkword.txt"); foreach ($chkword as $line) { $line = str_replace("\r", "" , $line); $line = str_replace("\n", "" , $line); if (strlen($line) == 0) { continue; } if (substr_count($chkmsg, $line)) { $chkresult = true; } } if ($chkresult) { message_die(GENERAL_MESSAGE, "禁止ワードが含まれています<br>詳細は master にお問合せください"); } } # これによって、本文にひらがなが含まれない投稿はブロックできるようになりましたが、 わずかにひらがなを含む投稿も2~3日に一件ほどあるので 条件を変更し、”本文の50%以上が英語の書き込みを拒否”という形にしたいのですが これは可能でしょうか? もし、可能であればどのように記述すればよいのでしょうか? ちなみにこのフォーラムのURLはhttp://www.be-emotion.com/seo/forum/です よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

$num1 = strlen($chkmsg); $num2 = mb_strlen($chkmsg); この2つの数の違いから・・・なんてどうでしょうか。

その他の回答 (1)

  • kalze
  • ベストアンサー率47% (522/1092)
回答No.1

未検証なので、とりあえず思いつく処理として。 $s_strを元の文字列とします。 $d_strに正規表現置換を使って$s_strから(大文字・小文字問わず)半角英字を削除する。 $s_strの文字数と$d_strの文字数を比較して、$s_strの文字数が$d_strの文字数の2倍以上の大きさであれば、$s_strに含まれる半角英字は全体の1/2以下である。 という感じでしょうか。 考慮すべき点としては、その他の半角(1バイト)記号でしょうかね。 上記の処理だと、改行や半角記号も日本語文字としてカウントされてしまうので、それらを削除したものを$s_strとしなければならないかも。 まぁこのへんはどこまでやるか次第でしょうけど。

関連するQ&A