9

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

“这是一个有效的地址”@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"
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

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

4

1 回答 1

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)

对于 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 ...

于 2012-11-21T13:20:40.923 回答