【PHPフォーム制作】名前は全角限定!ハニーポットでスパムも防ぐ実用テクニック
Webフォームでは、「入力ミス」や「スパム送信」などを未然に防ぐためのバリデーションやセキュリティ対策が欠かせません。この記事では、PHPを使ったお問い合わせフォームに対し、
- 「名前」を全角入力のみ許可する方法
- ハニーポットによるスパムボット対策
の2つのテクニックを紹介します。
名前欄に「全角」チェックを入れる理由
日本語名の入力欄に「半角英字や数字」が含まれていると、以下のようなトラブルを招く可能性があります
- 読みにくくなり、問い合わせ後の対応ミスにつながる
- 誤字やスパム風の入力に見える
- データベースや帳票への出力時にレイアウト崩れ
これらを防ぐため、名前欄には「全角文字のみ許可する」バリデーションをサーバー側で入れておくのが理想です。
2. フォーム側のサンプルHTML
以下は、お問い合わせフォームの一部(名前欄とハニーポット)のサンプルです:
<form action="mail.php" method="post">
<!-- スパム対策用:ハニーポット(非表示フィールド) -->
<input type="text" name="honeypot" style="display:none;" autocomplete="off">
<!-- 名前欄 -->
<label for="name">お名前(全角で入力してください)</label>
<input type="text" name="name" id="name" required placeholder="例:山田 太郎">
<input type="submit" value="送信">
</form>
🔒「honeypot」って何?
人間のユーザーには見えない入力欄(display:none)を設置し、スパムボットが自動で入力したら処理を拒否する仕組みです。
3. mail.php 側での全角チェックの追加
mail.php
側にて、送信された名前が全角のみかどうかをチェックするコードを追加します。
// 全角以外が含まれていないかチェック
if (!empty($_POST['name']) && !preg_match('/^[^ -~。-゚]+$/u', $_POST['name'])) {
$error_messages[] = "お名前は全角で入力してください。";
$has_error = true;
}
✅ 正規表現の意味
/^[^ -~。-゚]+$/
これは「半角英数字・記号・半角カタカナを含まない=全角のみ」という条件を意味しています。
マルチバイトの日本語入力(漢字・ひらがな・全角カタカナ)を想定した書き方です。
ハニーポット対策の追加(スパムブロック)
同じく mail.php
の最上部で、次のような処理を加えます:
// honeypot に値が入っていればスパムとして拒否
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['honeypot'])) {
http_response_code(403);
exit('スパム検出:アクセス拒否されました。');
}
これにより、スパムボットが honeypot
フィールドに誤って入力した場合、
即座に処理を打ち切って403 Forbidden を返すことができます。
実装後のイメージ
ユーザーがフォームに入力し、「お名前」に半角文字を使うと
- 「お名前は全角で入力してください」というエラーが表示される
- 送信処理は実行されず、ユーザーに修正を促す
また、スパムボットがhoneypot
フィールドに値を入れて送信した場合:
- 自動的にブロックされ、送信処理がキャンセルされる
まとめ
機能 | 内容 |
---|---|
名前の全角チェック | 半角混在の日本語名をバリデーションで排除 |
ハニーポット | 自動送信ボットによるスパム投稿の簡易検出と拒否処理 |
これらを組み合わせることで、フォームの品質と信頼性を大きく向上させることができます。
おまけ:JavaScriptでもチェックしたい場合
リアルタイムで弾きたいなら、以下のようなJSを併用するのもおすすめです。
document.getElementById('name').addEventListener('blur', function () {
if (!/^[^ -~。-゚]+$/.test(this.value)) {
alert('お名前は全角で入力してください');
}
});
フォームの信頼性を高めて、ユーザーと運営の安心を守ろう
小さな工夫でも、正確で安全なフォームをつくることができます。
今回紹介したようなバリデーションとスパム対策は、どんなWebサイトにもおすすめできる基本施策です。
ぜひ取り入れてみてください!
【PHP】直接アクセスできない送信完了ページの作り方|サンクスページのセキュリティ対策付き
6月 13, 2025PHPでの条件分岐のトラブル解決:詳細なURLが適用されない場合の対応
1月 7, 2025ハニーポット法とは?スパム対策の基本テクニック
10月 18, 2024