メールアドレスのエスケープ



テキストに書き出していた一覧との照合が必要な場合には、メールアドレスのエスケープには、注意が必要かも

例えば、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:メールアドレス