过滤器扩展提供了通过验证或清理数据来过滤数据的工具。当数据源包含未知(或外来)数据(例如用户在 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_flags | NULL | 设置默认过滤器时应用的默认标志。出于向后兼容性的原因,默认设置为 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 开始提供) |