【问题标题】: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说它是有效的呢?

【问题讨论】:

    标签: php email email-validation filter-var


    【解决方案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获取更多信息

    【讨论】:

    • 感谢您的回答,我想知道如何解决它。我的问题是要了解他们为什么允许这样做,我认为这很荒谬,感谢您的解决方案
    猜你喜欢
    • 2011-03-28
    • 2017-04-11
    • 2013-09-05
    • 2015-12-08
    • 2011-11-02
    • 2014-11-25
    • 2015-11-20
    • 2013-11-20
    • 1970-01-01
    相关资源
    最近更新 更多