FILTER_VALIDATE_EMAIL有多可靠?

9

样例有效的电子邮件地址:

"this is a valid address"@example.com

PHP 代码:

<?php
header('Content-Type: text/plain');

$email = '"this is a valid address"@example.com';
$checked = filter_var($email, FILTER_VALIDATE_EMAIL);
var_dump($email, $checked);

一个服务器上的输出结果: (PHP 版本 5.2.6):

string(37) ""this is a valid address"@example.com"
string(37) ""this is a valid address"@example.com"

phpinfo():

Input Validation and Filtering      enabled
Revision                            $Revision: 1.52.2.42 $

Directive             Local Value   Master Value
filter.default        unsafe_raw    unsafe_raw
filter.default_flags  no value      no value

在另一台服务器上的输出(PHP版本5.3.3):

string(37) ""this is a valid address"@example.com"
bool(false)

phpinfo()

Input Validation and Filtering      enabled
Revision                            $Revision: 298196 $

Directive             Local Value   Master Value
filter.default        unsafe_raw    unsafe_raw
filter.default_flags  no value      no value

我在文档中没有看到任何关于这个问题的变化,所以可能是其他配置设置导致的。


PHP邮件验证测试,半相关答案,提交记录和更改日志。结论:不一致;-) 它已经改进了几次。 - PeeHaa
1
这可能是一个有效的电子邮件地址,但使用它的人并不真正有效...在<head>中。如果你能做一些事情,并不意味着你应该这样做。出于对理智的尊重,我绝对永远不会向那样的地址发送电子邮件。 - CodeAngry
1个回答

6
你可以在http://3v4l.org/vKONS上看到,使用FILTER_VALIDATE_EMAIL 过滤器的结果并不一致!
对于PHP 5.2.0, 5.2.14 - 5.2.17, 5.3.3 - 5.3.18, 5.4.0 - 5.4.8版本,http://3v4l.org/vKONS输出的结果是不同的。
string(37) ""this is a valid address"@example.com" 
bool(false)

对于版本5.2.1-5.2.13和5.3.0-5.3.2,

string(37) ""this is a valid address"@example.com" 
string(37) ""this is a valid address"@example.com"
值得注意的是,它在5.2.0下起作用,但在5.2.1-5.2.13之间不起作用,然后又在5.2.14下起作用!!! 顺便提一下,3v4l.org是一个很好的资源,可以检查所有可用PHP版本中这种行为变化。
几个打开的漏洞,包括FILTER_VALIDATE_EMAIL一词,但似乎没有与您遇到的错误相匹配的。 您可以将其添加到PHP bugtracker...

以下是有关编程的内容,翻译成中文:在3v4l.org链接上接受问题答案。 - TRiG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接