![]() |
カレッヂ |
質問者 みそ
投稿日 2006/4/20(木) 13:06:57
最近海外からのスパムな書き込みが多いので 英語のみの書き込み(全角文字の無い書き込み)を ブロックしたいと考えました。 そこで、「文字列の長さ」と「文字列のバイト数」が 同じ場合エラーとしてやれば良いのでは?と思い 至ったのですが、では実際にどのような記述にすれば よいのか判りませんでした。 「ここを見れば良いよ」等ヒントでも構いません。 どうかよろしくお願いします。
【習熟度】(未選択) |
回答者 rescue
[削除]
投稿日 2006/5/12(金) 11:29:41
カッコ良くコーディングするなら、 http://ash.jp/ash/src/code/ http://washitake.com/cpp/kanji.php http://euc.jp/i18n/charcode.ja.html を参考にして、文字コードを判定して処理するプログラムを書くといいと思いますが、 簡単に考えるなら、データを1文字ずつ取り出し(substr)、 0123456789abcdef...xyz-/*+=.,!"#$%&'()0`|{}~+*>?_< まだあるかな? キーボードで打てるすべての半角文字の中にある文字かどうかを比較し、 1文字でも(または数個以上にあいまいにする)この範囲に無い文字が出てきたら 全角文字が含まれていると判断するとか… ## #### ■全角混在用substr() # 出典 Perl Tips <akebi.jp> by あけび for Shift_JIS ## sub z_substr { local($s,$p,$l) = @_; $s =~ s/(.)/$1\0/g; $s =~ s/([\x81-\x9f\xe0-\xfc])\0(.)\0/$1$2\0\0/g; $s = $l eq '' ? substr($s,$p*2):substr($s,$p*2,$l*2); $s =~ tr/\0//d; $s; } を併用すると精度もあがるかもしれません。 いろいろロジックを考えるもの面白いものです。 ---- サポート掲示板利用ご案内の通り、当方はバグと思われる事象以外には参加しません。 ただ、時間が許す場合に例外的に回答する場合がありますが、継続的にやりとりが 出来ない場合があります。ご理解ください。 |
質問者 みそ
[削除]
投稿日 2006/5/24(水) 12:13:04
レスポンスをいただきありがとうございます。 前回、具体的なコトを書いていなかったのですが、 簡易BBSのversion 10.31を利用させていただいて おります。前回の書き込みを行った時点では、 上記の様な対応でなんとかなるかな?と思ってた のですが、ネットサーフィンをするうちに、 文字列のバイト数はlengthで取得することが 出来そうだが、文字数を取得する術がなさそうだぞ と思い至り、ネットから拾ってきた下記の様な コードを追加することにしました。 if ($FORM{'value'} =~ /^[\x20-\x7E]+$/) { if ($FORM{'value'} !~ /^[\xA1-\xFCFF]+$/) { &error('入力ミス','内容に全角文字を含めてください.'); } } しかしこれだと改行が含まれた書き込みを弾くことが 出来なかったので、1行目を if ($FORM{'value'} =~ /^[\x20-\x7E\r]+$/m) { としてみました。 これでなんとか改行を含む半角のみの投稿をはじく ことができました。ありがとうございます。 |
返信(回答)する
Web裏技 |