Note: FILTER_NULL_ON_FAILURE, FILTER_REQUIRE_SCALAR, FILTER_REQUIRE_ARRAY and FILTER_FORCE_ARRAY dont have prefix "FILTER_FLAG_" but they are FLAGS!
下列常量由此扩展定义,且仅在此扩展编译入 PHP 或在运行时动态载入时可用。
这些常量用于 filter_input() 和 filter_input_array()。
INPUT_POST
(int)
INPUT_GET
(int)
INPUT_ENV
(int)
INPUT_SERVER
(int)
INPUT_SESSION
(int)
INPUT_REQUEST
(int)
FILTER_FLAG_NONE
(int)
FILTER_REQUIRE_SCALAR
(int)
FILTER_REQUIRE_ARRAY
(int)
FILTER_FORCE_ARRAY
(int)
FILTER_NULL_ON_FAILURE
(int)
null
而不是 false
。
可与任何验证 FILTER_VALIDATE_*
过滤器一起使用。
FILTER_FLAG_STRIP_LOW
(int)
FILTER_FLAG_STRIP_HIGH
(int)
FILTER_FLAG_STRIP_BACKTICK
(int)
`
)字符。
FILTER_FLAG_ENCODE_LOW
(int)
FILTER_FLAG_ENCODE_HIGH
(int)
FILTER_FLAG_ENCODE_AMP
(int)
&
。
FILTER_FLAG_NO_ENCODE_QUOTES
(int)
'
和 "
)将不会编码。
FILTER_FLAG_EMPTY_STRING_NULL
(int)
null
FILTER_VALIDATE_BOOL
(int)
"1"
、"true"
、"on"
和 "yes"
返回 true
。
对于 "0"
、"false"
、"off"
、"no"
和 ""
返回 false
。
非 bool 值的返回值取决于 FILTER_NULL_ON_FAILURE
。如果设置,则返回 null
,否则返回 false
。
default
FILTER_VALIDATE_BOOLEAN
(int)
FILTER_VALIDATE_BOOL
。该别名在 PHP 8.0.0 中引入其规范名称之前可用。
FILTER_VALIDATE_INT
(int)
注意: 字符串值在验证之前使用 trim()。
default
min_range
max_range
FILTER_FLAG_ALLOW_OCTAL
(int)
0[0-7]+
)。
FILTER_FLAG_ALLOW_HEX
(int)
0x[0-9a-fA-F]+
)。
FILTER_VALIDATE_FLOAT
(int)
注意: 字符串值在验证之前使用 trim()。
default
decimal
min_range
max_range
FILTER_FLAG_ALLOW_THOUSAND
(int)
,
),通常代表千位分隔符。
FILTER_VALIDATE_REGEXP
(int)
regexp
选项提供的正则表达式验证值。
default
regexp
FILTER_VALIDATE_URL
(int)
default
FILTER_FLAG_SCHEME_REQUIRED
(int)
自 PHP 7.3.0 起弃用,自 PHP 8.0.0 起移除。这是因为
FILTER_VALIDATE_URL
过滤器始终隐含。
FILTER_FLAG_HOST_REQUIRED
(int)
自 PHP 7.3.0 起弃用,自 PHP 8.0.0 起移除。这是因为
FILTER_VALIDATE_URL
过滤器始终隐含。
FILTER_FLAG_PATH_REQUIRED
(int)
FILTER_FLAG_QUERY_REQUIRED
(int)
有效的 URL 可能未指定 HTTP
协议(http://
)。因此,可能需要进一步验证以确定 URL
是否使用期望的协议,例如 ssh://
或 mailto:
。
此过滤器仅适用于 ASCII URL。这意味着将始终拒绝国际化域名(IDN)。
FILTER_VALIDATE_DOMAIN
(int)
default
FILTER_FLAG_HOSTNAME
(int)
FILTER_VALIDATE_EMAIL
(int)
addr-spec
语法进行的。拒绝注释、空格折叠和无点域名。
default
FILTER_FLAG_EMAIL_UNICODE
(int)
电子邮件验证很复杂,确认电子邮件有效且存在的唯一真正方法是向该地址发送电子邮件。
FILTER_VALIDATE_IP
(int)
验证值为 IP 地址。
default
FILTER_FLAG_IPV4
(int)
FILTER_FLAG_IPV6
(int)
FILTER_FLAG_NO_RES_RANGE
(int)
由协议保留
的范围。
IPv4 的对应以下范围:
0.0.0.0/8
, 169.254.0.0/16
, 127.0.0.0/8
, 240.0.0.0/4
.
IPv6 的对应以下范围:
::1/128
, ::/128
, ::FFFF:0:0/96
, FE80::/10
.
FILTER_FLAG_NO_PRIV_RANGE
(int)
IPv4 的对应以下范围:
10.0.0.0/8
, 172.16.0.0/12
, 192.168.0.0/16
.
FD
或 FC
开头。
FILTER_FLAG_GLOBAL_RANGE
(int)
Global
属性是 True
。自
PHP 8.2.0 起可用。
FILTER_VALIDATE_MAC
(int)
default
FILTER_UNSAFE_RAW
(int)
FILTER_FLAG_STRIP_*
和
FILTER_FLAG_ENCODE_*
过滤器清理 flag
一起使用,可以去除或编码特殊字符。
FILTER_DEFAULT
(int)
FILTER_UNSAFE_RAW
。
FILTER_SANITIZE_STRING
(int)
FILTER_FLAG_STRIP_*
和
FILTER_FLAG_ENCODE_*
过滤器清理 flag 一起使用,可以选择性地去除或编码指定字符。
可以使用 FILTER_FLAG_NO_ENCODE_QUOTES
过滤器 flag 禁用编码引号的行为。
自 PHP 8.1.0 起弃用,使用 htmlspecialchars() 代替。
此过滤器去除标签的方式不等同于 strip_tags()。
FILTER_SANITIZE_STRIPPED
(int)
FILTER_SANITIZE_STRING
。
自 PHP 8.1.0 起弃用,使用 htmlspecialchars() 代替。
FILTER_SANITIZE_ENCODED
(int)
FILTER_FLAG_STRIP_*
和
FILTER_FLAG_ENCODE_*
过滤器清理 flag 一起使用,可以选择性地去除或编码指定字符。
FILTER_SANITIZE_SPECIAL_CHARS
(int)
此过滤器对
'
, "
, <
, >
, &
和 ASCII 值小于 32 的字符进行 HTML 编码。
FILTER_FLAG_STRIP_*
过滤器清理
flag 一起使用,可以选择性地去除指定字符,并且可以使用 FILTER_FLAG_ENCODE_HIGH
对 ASCII 值大于 127 的字符进行编码。
FILTER_SANITIZE_FULL_SPECIAL_CHARS
(int)
ENT_QUOTES
。
可以使用 FILTER_FLAG_NO_ENCODE_QUOTES
过滤器 flag 禁用编码引号的行为。
与 htmlspecialchars() 一样,此过滤器可识别 default_charset INI 设置。如果检测到字节序列构成了当前字符集中的无效字符,则会拒绝整个字符串,从而返回空字符串。
FILTER_SANITIZE_EMAIL
(int)
[a-zA-Z]
)、数字([0-9]
)和特殊字符
!#$%&'*+-=?^_`{|}~@.[]
之外的所有字符来清理字符串。
FILTER_SANITIZE_URL
(int)
[a-zA-Z]
)、数字([0-9]
)和特殊字符
$-_.+!*'(),{}|\\^~[]`<>#%";/?:@&=
之外的所有字符来清理字符串。
FILTER_SANITIZE_NUMBER_INT
(int)
[0-9]
)、加号(+
)和减号(-
)之外的所有字符来清理字符串。
FILTER_SANITIZE_NUMBER_FLOAT
(int)
[0-9]
)、加号(+
)和减号(-
)之外的所有字符来清理字符串。
FILTER_FLAG_ALLOW_FRACTION
(int)
.
)字符,通常表示为整数部分和小数部分之间的分隔符。
FILTER_FLAG_ALLOW_THOUSAND
(int)
,
)字符,通常代表千位分隔符。
FILTER_FLAG_ALLOW_SCIENTIFIC
(int)
e
和 E
字符来接受科学计数法中的数字。
如果未使用 FILTER_FLAG_ALLOW_FRACTION
flag,则会移除小数分隔符,从而改变接收到的值。
<?php
$number = '12.34';
var_dump(filter_var($number, FILTER_SANITIZE_NUMBER_FLOAT));
var_dump(filter_var($number, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
?>
以上示例会输出:
string(4) "1234" string(5) "12.34"
FILTER_SANITIZE_ADD_SLASHES
(int)
FILTER_SANITIZE_MAGIC_QUOTES
(int)
FILTER_SANITIZE_ADD_SLASHES
。
自 PHP 7.3.0 起弃用,自 PHP 8.0.0 起移除。
FILTER_CALLBACK
(int)
'options'
key 关联的值传递给 options
参数。
callback 应具有以下签名:
value
注意: callback 返回的值作为调用过滤函数返回的值。
示例 #1
使用 FILTER_CALLBACK
验证登录名的示例
<?php
function validate_login($value): ?string
{
if (strlen($value) >= 5 && ctype_alnum($value)) {
return $value;
}
return null;
}
$login = "val1dL0gin";
$filtered_login = filter_var($login, FILTER_CALLBACK, ['options' => 'validate_login']);
var_dump($filtered_login);
$login = "f&ke login";
$filtered_login = filter_var($login, FILTER_CALLBACK, ['options' => 'validate_login']);
var_dump($filtered_login);
?>
以上示例会输出:
string(10) "val1dL0gin" NULL
此过滤器不能与其他任何过滤器 flag 一起使用,例如 FILTER_NULL_ON_FAILURE
。
Note: FILTER_NULL_ON_FAILURE, FILTER_REQUIRE_SCALAR, FILTER_REQUIRE_ARRAY and FILTER_FORCE_ARRAY dont have prefix "FILTER_FLAG_" but they are FLAGS!