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

为什么PHP filter_var说这是一个有效的电子邮件地址?,php,email,email-validation,filter-var,Php,Email,Email Validation,Filter Var,当用户注册到我的站点时,我使用filter\u varPHP函数验证电子邮件地址 我在帖子中使用了以下代码: $email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL); 然后我会: if(!$email) { // return to the form } else { // send registration info } 现在,当我var\u dump($email)时,我得到了输出: string(23) "use

当用户注册到我的站点时,我使用
filter\u var
PHP函数验证电子邮件地址

我在帖子中使用了以下代码:

$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
然后我会:

if(!$email) {
  // return to the form 
}
else {
  // send registration info
}
现在,当我
var\u dump($email)
时,我得到了输出:

string(23) "user."name"@example.com"
我想知道为什么这个不返回false。我认为双引号是不可接受的,那么为什么PHP说它是有效的呢?

它是一个:

带引号的字符串可以作为点分隔实体存在于 本地部分,或者当最外面的引号是最外面的时,它可能存在 本地部分的字符(例如abc“defghi”)。xyz@example.com或 “abcdefghixyz”@example.com是允许的。abc“defghi”xyz@example.com是 不是;abc“def”也不是ghi@example.com)

我也有同样的问题(参见Dalmas关于为什么它是有效的),下面是我如何解决的:

filter_var($email, FILTER_SANITIZE_EMAIL);
例如:

将输出:

string(21) "user.name@example.com"
然后,您可以使用验证来验证电子邮件


你可以在

上获得更多信息谢谢你提供的信息,我认为他们允许这样做是荒谬的chars@fred不是每个人都会说和写英语。双引号通常用于其他语言的字符。现在没那么可笑了吧?谢谢你的回答,我在想我该怎么解决它。我的问题是要理解他们为什么允许这样做,我认为这很荒谬,谢谢你的解决方案
string(21) "user.name@example.com"