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。结论:没有不一致 ;-) 它已经改进了几次。 这可能是一个有效的电子邮件地址,但任何使用它的人都不是真正有效的......在<head>
。 如果你能做一些事情,它并不意味着你应该这样做。出于对理智的尊重,我绝对不会向这样的地址发送电子邮件。
【参考方案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 是不是使字符串可以安全地插入数据库?