为啥 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 说这是一个有效的电子邮件地址?的主要内容,如果未能解决你的问题,请参考以下文章