过滤器扩展提供了通过验证或清理数据来过滤数据的工具。当数据源包含未知(或外来)数据(例如用户在 HTML 表单中提供的输入)时,这尤其有用。

过滤有两种主要类型:验证和清理。

验证用于验证数据是否满足某些条件。例如,传入 FILTER_VALIDATE_EMAIL 将确定数据是否是有效的电子邮件地址。但这不会改变数据本身。

清理将清理数据,并可能通过删除不需要的字符来更改数据。例如,传入 FILTER_SANITIZE_EMAIL 将删除不适合电子邮件地址包含的字符。但这不会验证数据。

可以选择将标志与验证和清理一起使用,以根据需要调整行为。例如,在过滤 URL 时传入 FILTER_FLAG_PATH_REQUIRED 将需要存在路径。

安装

默认情况下启用过滤器扩展。要禁用过滤器扩展,请使用 --disable-filter。

无需安装即可使用这些功能。这些函数是 PHP 核心的一部分。

运行时配置

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

过滤器配置选项

名称默认描述可更改
filter.default"unsafe_raw"通过此过滤器过滤所有 $_GET、$_POST、$_COOKIE、$_REQUEST 和 $_SERVER 数据。原始数据可以通过filter_input()访问。默认情况下接受您喜欢使用的过滤器的名称。请参阅现有的过滤器列表以获取过滤器名称列表。PHP_INI_PERDIR
filter.default_flagsNULL设置默认过滤器时应用的默认标志。出于向后兼容性的原因,默认设置为 FILTER_FLAG_NO_ENCODE_QUOTES。PHP_INI_PERDIR

过滤器类型

PHP 过滤器函数

函数描述
filter_has_var()检查指定类型的变量是否存在。
filter_id()返回属于指定过滤器的过滤器 ID。
filter_input()按名称获取特定的外部变量并可选择对其进行过滤。
filter_input_array()获取外部变量并可选择过滤它们。
filter_list()返回所有列表支持的过滤器。
filter_var_array()获取多个变量并可选择过滤它们。
filter_var() 使用指定的过滤器过滤变量。

PHP 过滤器预定义常量

下面的常量是由该扩展定义,并且仅当该扩展被编译成 PHP 或在运行时动态加载时才可用。

常量类型描述
INPUT_POST整数POST 变量。
INPUT_GET整数GET  变量。
INPUT_COOKIE整数COOKIE 变量。
INPUT_ENV整数ENV 变量。
INPUT_SERVER整数SERVER 变量。
INPUT_SESSION整数会话变量。 (尚未实现)
INPUT_REQUEST整数REQUEST变量。 (尚未实现)
FILTER_FLAG_NONE整数无标志。
FILTER_REQUIRE_SCALAR整数用于要求标量作为输入的标志
FILTER_REQUIRE_ARRAY整数需要一个数组作为输入。

FILTER_FORCE_ARRAY整数始终返回一个数组。
FILTER_NULL_ON_FAILURE整数失败时使用 NULL 而不是 FALSE。
FILTER_VALIDATE_INT整数"int"过滤器的 ID。
FILTER_VALIDATE_BOOL整数FILTER_VALIDATE_BOOLEAN 的别名。
FILTER_VALIDATE_BOOLEAN整数"boolean"过滤器的 ID。
FILTER_VALIDATE_FLOAT整数"float"过滤器的 ID。
FILTER_VALIDATE_REGEXP整数"validate_regexp"过滤器的 ID。
FILTER_VALIDATE_URL整数"validate_url"的 ID " 过滤器。
FILTER_VALIDATE_DOMAIN整数"validate_domain"过滤器的 ID。 (从 PHP 7.0.0 开始提供)
FILTER_VALIDATE_EMAIL整数"validate_email"过滤器的 ID。
FILTER_VALIDATE_IP整数"validate_ip"过滤器的ID。
FILTER_VALIDATE_MAC整数"validate_mac_address"过滤器的 ID。
FILTER_DEFAULT整数默认("unsafe_raw")过滤器的 ID。这相当于FILTER_UNSAFE_RAW。
FILTER_UNSAFE_RAW整数"unsafe_raw"过滤器的ID。
FILTER_SANITIZE_STRING整数"字符串"过滤器的 ID。
FILTER_SANITIZE_STRIPPED整数"剥离"过滤器的 ID。
FILTER_SANITIZE_ENCODED整数"的 ID"
FILTER_SANITIZE_SPECIAL_CHARS整数"special_chars"过滤器的 ID。
FILTER_SANITIZE_EMAIL整数"电子邮件"过滤器的 ID。
FILTER_SANITIZE_URL整数"url"过滤器的 ID。
FILTER_SANITIZE_NUMBER_INT整数"number_int"的 ID
FILTER_SANITIZE_NUMBER_FLOAT整数"number_float"过滤器的 ID。
FILTER_SANITIZE_MAGIC_QUOTES整数"magic_quotes"过滤器的 ID。 (自 PHP 7.3.0 起已弃用,自 PHP 8.0.0 起已删除,请改用 FILTER_SANITIZE_ADD_SLASHES。)
FILTER_SANITIZE_ADD_SLASHES整数"add_slashes"过滤器的 ID。 (从 PHP 7.3.0 开始提供)
FILTER_CALLBACK整数"回调"过滤器的 ID。
FILTER_FLAG_ALLOW_OCTAL整数在"int"过滤器中允许八进制表示法(0[0-7]+)。
FILTER_FLAG_ALLOW_HEX整数在"int"过滤器中允许十六进制表示法(0x[0-9a-fA-F]+)。
FILTER_FLAG_STRIP_LOW整数删除 ASCII 值小于 32 的字符。
FILTER_FLAG_STRIP_HIGH整数删除 ASCII 值大于 127 的字符。
FILTER_FLAG_STRIP_BACKTICK整数去除反引号字符。
FILTER_FLAG_ENCODE_LOW整数对 ASCII 值小于 32 的字符进行编码。
FILTER_FLAG_ENCODE_HIGH整数对 ASCII 值大于 127 的字符进行编码。
FILTER_FLAG_ENCODE_AMP整数编码&。
FILTER_FLAG_NO_ENCODE_QUOTES整数Don不编码 ' 和 "。
FILTER_FLAG_EMPTY_STRING_NULL整数(暂时没用。)
FILTER_FLAG_ALLOW_FRACTION整数在"number_float"过滤器中允许小数部分。
FILTER_FLAG_ALLOW_THOUSAND整数在"number_float"过滤器中允许使用千位分隔符 (,)。
FILTER_FLAG_ALLOW_SCIENTIFIC整数在"number_float"过滤器中允许使用科学计数法(e、E)。
FILTER_FLAG_PATH_REQUIRED整数需要"validate_url"过滤器中的路径。
FILTER_FLAG_QUERY_REQUIRED整数需要在"validate_url"过滤器中查询。
FILTER_FLAG_SCHEME_REQUIRED整数"validate_url"过滤器中需要方案。 (根据 PHP 7.3 已弃用,因为它已隐含在过滤器中。)
FILTER_FLAG_HOST_REQUIRED整数需要"validate_url"中的主机" 筛选。 (PHP 7.3 已弃用,因为它已隐含在过滤器中。)
FILTER_FLAG_HOSTNAME整数要求主机名以以下字符开头字母数字字符且仅包含字母数字字符或连字符。 (从 PHP 7.0.0 开始提供)
FILTER_FLAG_IPV4整数在"validate_ip"过滤器中仅允许 IPv4 地址。
FILTER_FLAG_IPV6整数在"validate_ip"过滤器中仅允许 IPv6 地址。
FILTER_FLAG_NO_RES_RANGE整数拒绝"validate_ip"过滤器中的保留地址。
FILTER_FLAG_NO_PRIV_RANGE整数拒绝"validate_ip"过滤器中的私人地址。
FILTER_FLAG_EMAIL_UNICODE整数接受 Unicode 字符在"validate_email"过滤器的本地部分。 (从 PHP 7.1.0 开始提供)