为什么PHP filter_var说这是一个有效的电子邮件地址?

fre*_*red 10 php email email-validation filter-var

filter_var当用户注册我的网站时,我使用PHP函数来验证电子邮件地址.

我使用帖子中的代码:

$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
Run Code Online (Sandbox Code Playgroud)

后来我做了:

if(!$email) {
  // return to the form 
}
else {
  // send registration info
}
Run Code Online (Sandbox Code Playgroud)

现在当我var_dump($email),我得到输出:

string(23) "user."name"@example.com"
Run Code Online (Sandbox Code Playgroud)

我想知道为什么这不会返回错误.我认为双引号是不可接受的,那么为什么PHP说它有效?

Dal*_*mas 15

一个有效的电子邮件地址:

引用的字符串可以作为本地部分中的点分隔实体存在,或者当最外面的引号是本地部分的最外面的字符时可以存在(例如abc."defghi".xyz @ example.com或"abcdefghixyz"@允许使用example.com.abc"defghi"xyz@example.com不是; abc \"def \"ghi@example.com也不是.

  • 感谢您的信息,我认为他们允许这样的字符是荒谬的 (5认同)

Boo*_*eus 11

我遇到了同样的问题(请参阅Dalmas关于它有效的原因)以及我如何修复它:

filter_var($email, FILTER_SANITIZE_EMAIL);
Run Code Online (Sandbox Code Playgroud)

例如:

$email = 'user."name"@example.com';
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
Run Code Online (Sandbox Code Playgroud)

将输出:

string(21) "user.name@example.com"
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用验证来验证电子邮件.

你可以在php网站上获得更多信息