• ベストアンサー

PHPフォームのスパム対策

PHPフォームのスパム対策についてなのですが 氏名のふりがなをひらがな入力でチェックをしたいのですが 下記記述でうまくいきません。PHPの初心者なのでご教授いただけますでしょうか? ( PHPの一部抜粋ですが //20090403 in の箇所を追記しました。) //////////////// // メイン処理 // //////////////// if ($method == 3) { include($smtp_class); } @header("Content-Type: text/html; charset=EUC-JP"); if (isset($_POST['FORM'])) { //フォームからのデータを評価 if ($_POST['FORM']['NAME'] == "") { die('名前が入力されていません'); } //20090403 in if ($_POST['FORM']['FURIGANA'] == "") { die('ふりがなを ひらがなで入力してください。'); } if ($_POST['FORM']['EMAIL'] == "") { die('Eメールが入力されていません'); } if ($_POST['FORM']['MESSAGE'] == "") { die('メッセージが入力されていません'); } if (strlen($_POST['FORM']['MESSAGE']) > $max) { die('文字数が多すぎます'); } if ($_POST['FORM']['SUBJECT'] == "") { $_POST['FORM']['SUBJECT'] = '(untitled)'; //タイトルなしの場合 } //改行コードを<LF>に統一 $_POST['FORM']['MESSAGE'] = str_replace("\r\n", "\n", $_POST['FORM']['MESSAGE']); $_POST['FORM']['MESSAGE'] = str_replace("\r", "\n", $_POST['FORM']['MESSAGE']); //先頭と末尾のホワイトスペースを削除 $_POST['FORM']['MESSAGE'] = trim($_POST['FORM']['MESSAGE']); //メッセージ部分のフォーマット $_POST['FORM']['MESSAGE'] = "\n" . "----------------------------------------------------------------------\n" . $_POST['FORM']['MESSAGE']."\n" . "----------------------------------------------------------------------\n"; //メール本文の作成 $body = ""; //初期化 while (list($item, $value) = each($_POST['FORM'])) { if (get_magic_quotes_gpc()) { $value = stripslashes($value); } $body .= sprintf("%-8s", $item)." : ".$value."\n"; } //漢字コード変換( EUC → JIS ) if ($enable_EUCtoJIS) { $body = EUCtoJIS($body); $subject = '=?ISO-2022-JP?B?'.base64_encode(EUCtoJIS($_POST['FORM']['SUBJECT'])).'?='; $from_name = '=?ISO-2022-JP?B?'.base64_encode(EUCtoJIS($_POST['FORM']['NAME'])).'?='; $kana_name = '=?ISO-2022-JP?B?'.base64_encode(EUCtoJIS($_POST['FORM']['FURIGANA'])).'?='; } //20090403 in if (!mb_ereg("^[ぁ-ん]+$", $_POST['FORM']['FURIGANA'])) { $from = $kana_name." <".$_POST['FORM']['FURIGANA'].">"; } if (ereg("^[0-9A-Za-z._-]+@[0-9A-Za-z.-]+$", $_POST['FORM']['EMAIL'])) { $from = $from_name." <".$_POST['FORM']['EMAIL'].">"; } else { $from = $from_name." <".$to.">"; }    以下略 ------------ 御多忙のところ恐縮ですがよろしくお願いいたします。

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

  • ベストアンサー
  • Suzi
  • ベストアンサー率38% (130/334)
回答No.2

ひらがなは、「ぁ-ん」なので、 if(mb_ereg('^[ぁ-ん]+$', $hoge)) print ・・・・・←ふりがなはひらがな else print・・・・ ←ふりがなは空欄かひらがなではない とかではどうでしょうか。

ya-ya-
質問者

お礼

ありがとうございました。 悪戦苦闘していますが、もっと頑張ってみます。。。

その他の回答 (1)

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

正規表現を使ってhitしなかったら無効って形にしたらどうだろう? 平仮名のリストを作成するのが(最初だけ)めんどくさいけどね

ya-ya-
質問者

お礼

ありがとうございました。 悪戦苦闘していますが、もっと頑張ってみます。。。

関連するQ&A