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

Posted

技术标签:

【中文标题】为啥 PHP filter_var 说这是一个有效的电子邮件地址?【英文标题】:Why does PHP filter_var say that this is a valid email address?为什么 PHP filter_var 说这是一个有效的电子邮件地址? 【发布时间】:2012-01-23 02:13:35 【问题描述】:

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

我使用帖子中的这段代码:

$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);

然后我会这样做:

if(!$email) 
  // return to the form 

else 
  // send registration info

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

string(23) "user."name"@example.com"

我想知道为什么这不会返回 false。我觉得双引号是不可接受的,那为什么PHP说它是有效的呢?

【问题讨论】:

【参考方案1】:

valid email address:

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

【讨论】:

感谢您的信息,我认为他们允许这样的字符很荒谬 @fred 不是每个人都会说和写英语。双引号通常用于其他语言的字符。现在没那么可笑了吧?【参考方案2】:

我遇到了同样的问题(请参阅 Dalmas 了解它为何有效),这是我解决它的方法:

filter_var($email, FILTER_SANITIZE_EMAIL);

例如:

$email = 'user."name"@example.com';
$email = filter_var($email, FILTER_SANITIZE_EMAIL);

将输出:

string(21) "user.name@example.com"

然后您可以使用您的验证来验证电子邮件。

您可以通过php site获取更多信息

【讨论】:

感谢您的回答,我想知道如何解决它。我的问题是要了解他们为什么允许这样做,我认为这很荒谬,感谢您的解决方案

以上是关于为啥 PHP filter_var 说这是一个有效的电子邮件地址?的主要内容,如果未能解决你的问题,请参考以下文章

PHP filter_var() 函数

php filter_var()

PHP 和 MYSQL:为啥 A 有效而 B 无效?

filter_var() 验证邮箱ipurl的格式 php

filter_var() 验证邮箱ipurl的格式 php

filter_var() 验证邮箱ipurl的格式 php