FILTER_VALIDATE_EMAIL的一致性如何?

TRi*_*RiG 9 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);
Run Code Online (Sandbox Code Playgroud)

一台服务器上的输出:(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
Run Code Online (Sandbox Code Playgroud)

另一台服务器上的输出(PHP Version 5.3.3):

string(37)""这是一个有效的地址"@ 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
Run Code Online (Sandbox Code Playgroud)

我在文档中看不到任何暗示这已经改变的内容,所以也许是其他一些配置设置.

pow*_*tac 6

正如你在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)
Run Code Online (Sandbox Code Playgroud)

对于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"
Run Code Online (Sandbox Code Playgroud)

值得注意的是,它适用于5.2.0但不适用于5.2.1-5.2.13,然后再适用于5.2.14 !!!

Btw 3v4l.org是一个很好的资源,可以检查所有可用PHP版本中的此类行为更改.

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