PHP 过滤器简介

PHP 过滤器用于对来自非安全来源的数据(比如用户输入)进行验证和过滤。


安装

自 PHP 5.2.0, filter 函数是 PHP 核心的组成部分。无需安装即可使用这些函数。


运行时配置

这些函数的行为受 php.ini 中的设置影响:

名称 描述 默认值 Changeable
filter.default 通过此过滤器过滤所有 $_GET、$_POST、$_COOKIE、$_REQUEST 和 $_SERVER 数据。 默认情况下接受您喜欢使用的过滤器的名称。 过滤器名称列表见过滤器列表 "unsafe_raw" PHP_INI_PERDIR
filter.default_flags 设置默认过滤器时应用的默认标志。 出于向后兼容性的原因,默认设置为 FILTER_FLAG_NO_ENCODE_QUOTES PHP_INI_PERDIR

PHP Filter 函数

函数 描述
filter_has_var() 检查是否存在指定输入类型的变量。
filter_id() 返回指定过滤器的 ID 号。
filter_input() 从脚本外部获取输入,并进行过滤。
filter_input_array() 从脚本外部获取多项输入,并进行过滤。
filter_list() 返回包含所有得到支持的过滤器的一个数组。
filter_var() 获取一个变量,并进行过滤。
filter_var_array() 获取多项变量,并进行过滤。

PHP 预定义过滤器常量

常量 描述
INPUT_POST POST 变量
INPUT_GET 获取变量
INPUT_COOKIE COOKIE 变量
INPUT_ENV 环境变量
输入服务器 服务器变量
FILTER_DEFAULT 什么都不做,可以选择剥离/编码特殊字符。相当于 FILTER_UNSAFE_RAW
FILTER_FLAG_NONE 不允许标记
FILTER_FLAG_ALLOW_OCTAL 仅适用于以零 (0) 作为八进制数开头的输入。这只 允许后面的数字为 0-7
FILTER_FLAG_ALLOW_HEX 仅适用于以 0x/0X 作为十六进制数字开头的输入。这只 允许后续字符为 a-fA-F0-9
FILTER_FLAG_STRIP_LOW 剥离 ASCII 值小于 32 的字符
FILTER_FLAG_STRIP_HIGH 剥离 ASCII 值大于 127 的字符
FILTER_FLAG_ENCODE_LOW 对 ASCII 值小于 32 的字符进行编码
FILTER_FLAG_ENCODE_HIGH 对 ASCII 值大于 127 的字符进行编码
FILTER_FLAG_ENCODE_AMP 编码和
FILTER_FLAG_NO_ENCODE_QUOTES 不要编码 ' 和 "
FILTER_FLAG_EMPTY_STRING_NULL 未使用
FILTER_FLAG_ALLOW_FRACTION 允许将句点 (.) 作为数字中的小数分隔符
FILTER_FLAG_ALLOW_THOUSAND 允许逗号 (,) 作为数字中的千位分隔符
FILTER_FLAG_ALLOW_SCIENTIFIC 允许在数字中使用 e 或 E 表示科学记数法
FILTER_FLAG_PATH_REQUIRED URL 必须包含路径部分
FILTER_FLAG_QUERY_REQUIRED URL 必须包含查询字符串
FILTER_FLAG_IPV4 允许 IP 地址为 IPv4 格式
FILTER_FLAG_IPV6 允许 IP 地址采用 IPv6 格式
FILTER_FLAG_NO_RES_RANGE 对保留的 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 私有 IPv4 范围验证失败:10.0.0.0/8、172.16.0.0/12 和 192.168.0.0/16,以及以 FD 或 FC 开头的 IPv6 地址
FILTER_FLAG_EMAIL_UNICODE 允许电子邮件地址的本地部分包含 Unicode 字符
FILTER_REQUIRE_SCALAR 值必须是标量
FILTER_REQUIRE_ARRAY 值必须是数组
FILTER_FORCE_ARRAY 将标量值视为数组,标量值作为唯一元素
FILTER_NULL_ON_FAILURE 在无法识别的布尔值失败时返回 NULL
FILTER_VALIDATE_BOOLEAN 验证一个布尔值
FILTER_VALIDATE_EMAIL Validates value as a valid e-mail address
FILTER_VALIDATE_FLOAT 以浮点数验证值。
FILTER_VALIDATE_INT 在指定的范围以整数验证值。
FILTER_VALIDATE_IP 把值作为 IP 地址来验证。
FILTER_VALIDATE_MAC 将值验证为 MAC 地址
FILTER_VALIDATE_REGEXP 根据 regexp,兼容 Perl 的正则表达式来验证值。
FILTER_VALIDATE_URL 把值作为 URL 来验证。
FILTER_SANITIZE_EMAIL 把值作为 e-mail 来验证。
FILTER_SANITIZE_ENCODED 去除或编码特殊字符。
FILTER_SANITIZE_MAGIC_QUOTES 应用 addslashes()
FILTER_SANITIZE_NUMBER_FLOAT 删除所有字符,除了数字、+- 以及 .,eE。
FILTER_SANITIZE_NUMBER_INT 删除所有字符,除了数字和 +-
FILTER_SANITIZE_SPECIAL_CHARS 删除特殊字符
FILTER_SANITIZE_STRING 去除标签,去除或编码特殊字符。
FILTER_SANITIZE_STRIPPED FILTER_SANITIZE_STRING 过滤器的别名。
FILTER_SANITIZE_URL 从 URL 中删除所有非法字符
FILTER_UNSAFE_RAW 不进行任何过滤,去除或编码特殊字符。
FILTER_CALLBACK 调用用户自定义函数来过滤数据。