メールアドレスのエスケープ
テキストに書き出していた一覧との照合が必要な場合には、メールアドレスのエスケープには、注意が必要かも
例えば、Gmailを使っている人なら、example+1@gmail.comとか、+hogeをつけて、表面上複数メールアドレスでひとつのメールアドレスに届くようにする事ありますよね
自分がよく見るメールアドレスの枠にはまらないメールがたくさんある
<?php $mail = "example@;example.com"; $s = $mail.":1267494898"; $reg = quotemeta($mail); $reg = '!^'.$reg.':!m'; echo "<p>エスケープした場合</p>"; if(preg_match($reg,$s)){ echo "match"; }else{ echo "unmatch"; } echo "<p>エスケープに問題がある場合</p>"; $reg = htmlspecialchars($mail); $reg = '!^'.$reg.':!m'; if(preg_match($reg,$s)){ echo "match"; }else{ echo "unmatch"; } echo "<p>エスケープしない場合</p>"; $reg = $mail; $reg = '!^'.$reg.':!m'; if(preg_match($reg,$s)){ echo "match"; }else{ echo "unmatch"; } ?>
エスケープしなくても、example@example.comのようなメールアドレスは、ヒットできますが、
example+a@example.comのようなアドレスがあると、ヒットしなくなる。
(この例が、使えるのは、Gmailで複数のメールアドレスのように使うときに行われる)
htmlspecialcharsだと、メールアドレスには、&が使えるので、ヒットしなくなる。
wikipedia:メールアドレス