FILTER_VALIDATE_EMAIL的一致性如何?

时间:2012-11-21 13:15:42

标签: php email filtering

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

  

“这是一个有效的地址”@ 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 Version 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 Version 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中看不到任何暗示这已经改变的内容,所以也许是其他一些配置设置。

1 个答案:

答案 0 :(得分: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 !!!

Btw 3v4l.org是检查所有可用PHP版本中此类行为更改的绝佳资源。

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