FILTER_VALIDATE_EMAIL 的一致性如何?

Posted

技术标签:

【中文标题】FILTER_VALIDATE_EMAIL 的一致性如何?【英文标题】:How consistent is FILTER_VALIDATE_EMAIL? 【发布时间】:2012-11-09 18:06:29 【问题描述】:

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

“这是一个有效的地址”@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) ""这是一个有效的地址"@example.com" string(37) ""这是一个有效的地址"@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) ""这是一个有效的地址"@example.com" 布尔(假)

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

我在 the documentation 中看不到任何表明这已更改的内容,因此可能是其他一些配置设置。

【问题讨论】:

Tests for PHP mail validation、Semi related answer、Commits 和 Changelog。结论:没有不一致 ;-) 它已经改进了几次。 这可能是一个有效的电子邮件地址,但任何使用它的人都不是真正有效的......在&lt;head&gt; 如果你能做一些事情,它并不意味着你应该这样做。出于对理智的尊重,我绝对不会向这样的地址发送电子邮件。 【参考方案1】:

正如您在http://3v4l.org/vKONS 上看到的,过滤器FILTER_VALIDATE_EMAIL 的使用并不一致!

http://3v4l.org/vKONS PHP 5.2.0、5.2.14 - 5.2.17、5.3.3 - 5.3.18、5.4.0 - 5.4.8 的输出

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 版本中此类行为变化的绝佳资源。

有 several bugs open 包括术语 FILTER_VALIDATE_EMAIL,但似乎没有一个与您的错误类型相匹配。您可以将其添加到PHP bugtracker...

【讨论】:

接受回答问题。 +1 链接到 3v4l.org。

以上是关于FILTER_VALIDATE_EMAIL 的一致性如何?的主要内容,如果未能解决你的问题,请参考以下文章

什么是 php FILTER_VALIDATE_EMAIL 的 Jquery 等价物 [重复]

FILTER_VALIDATE_EMAIL 是不是使字符串可以安全地插入数据库?

PHP 的 filter_var FILTER_VALIDATE_EMAIL 真的有效吗?

phpDOC

验证电子邮件地址

有用的正则表达式函数