- ベストアンサー
サニタイズについて教えてください
- PHPの問い合わせフォームでのサニタイズ方法を教えてください
- サニタイズはhtmlspecialchars以外にも何か方法があるのでしょうか?
- 入力内容の誤りをチェックするためのコードも教えてください
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
<?php function in_array_denial( $ary, $n ) { foreach ( $ary as $a ) if ( $a !== $n ) return false; return true; } define( 'FE_EMPTY', 1 ); define( 'FEDESAGREEMENT', 2 ); $e = array( 'name' => 0 ,'mail' => 0 ,'mail2' => 0 ,'list' => 0 ,'content' => 0 ); // 名前のチェック if( $_POST['name'] === '' ) $e['name'] = FE_EMPTY; // 空文字と比較する場合は === を用いる // E-mailのチェック if ( !preg_match('/^[a-z0-9][a-z0-9_\.\-]*@[a-z0-9][a-z0-9_\.\-]+[a-z]$/i', $_POST['mail']) ) $e['mail'] = FE_DESAGREEMENT; // 確認用チェック if( $_POST['mail2'] === '' ) $e['mail2'] = FE_EMPTY; elseif( $_POST['mail'] !== $_POST['mail2'] ) $e['mail2'] = FE_DESAGREEMENT; // お問い合わせ内容確認? if($list=='お問い合せ内容をお選びください') $e['list'] = true; // 内容 if($content=='') $e['content'] = FE_EMPTY; ?> <?php if( in_array_denial( $e, 0 ) ) : ?> <p align="center"><font color="#cc3333">入力内容に誤りがあります。※印の項目は必ずご記入ください。</font></p> <?php else : ?> <p class="text4">以下の内容で送信しますか?</p> <?php endif; ?> <table class="table margin01" width="592" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="190" align="left" bgcolor="#FFF09D">お名前<span class="tabletext1"></span></td> <td> <?php if( $e['name'] === FE_EMPTY ) :?> <font color="#cc3333">必ず入力してください</font><br/> <?php else : ?> <?=htmlentities($_POST['name'], ENT_COMPAT|ENT_XHTML, UTF-8 )?><!--値を埋め込む場合は必ずサニタイズを行う--> <?php endif;?> </td> </tr> ・・・ <?php if( in_array_denial( $e, 0 ) ) : ?> <p align="center" class="margin01"><a href="..." value="戻る" onclick="history.back()"></a></p>'; <?php else : ?> <form method="post"action="thanks.php">'; <input type="hidden" name="name" value="<?=htmlentities($_POST['name'], ENT_COMPAT|ENT_XHTML, UTF-8 )?>"> <input type="hidden" name="mail" value="<?=htmlentities($_POST['mail'], ENT_COMPAT|ENT_XHTML, UTF-8 )?>"> <input type="hidden" name="mail2" value="<?=htmlentities($_POST['mail2'], ENT_COMPAT|ENT_XHTML, UTF-8 )?>"> <input type="hidden" name="list" value="<?=htmlentities($_POST['list'], ENT_COMPAT|ENT_XHTML, UTF-8 )?>"> <input type="hidden" name="content" value="<?=htmlentities($_POST['content'], ENT_COMPAT|ENT_XHTML, UTF-8 )?>"> <p align="center" class="margin01"><a href="..." onclick="history.back()"value="戻る"> <input type="submit"value="OK"></p> </form> <?php endif; ?>
その他の回答 (1)
- shimix
- ベストアンサー率54% (865/1590)
「どういう処理をするのか」によります。 ブラウザに(htmlソースとして)返すのであれば必ずhtmlspecialchars()を通してください。 http://php.net/manual/ja/function.htmlspecialchars.php 第二引数はENT_QUOTES、第三引数で文字エンコードもキチンと指定します。
お礼
ありがとうございます!! 試してみます!!
お礼
ありがとうございます!!