PHP的filter_input()函数中$filter参数支持的过滤器类型可分为验证过滤器(Validate)和清理过滤器(Sanitize)两大类。以下是完整过滤器类型清单:
📋 验证过滤器(VALIDATE)
| 过滤器常量 | 值 | 作用说明 |
|---|
FILTER_VALIDATE_BOOLEAN | 258 | 验证布尔值(true/false/1/0/on/off等) |
FILTER_VALIDATE_EMAIL | 274 | 验证电子邮件格式(如user@example.com) |
FILTER_VALIDATE_FLOAT | 259 | 验证浮点数,可指定小数点精度
|
FILTER_VALIDATE_INT | 257 | 验证整数,可指定范围(min_range/max_range) |
FILTER_VALIDATE_IP | 275 | 验证IP地址(支持IPv4/IPv6) |
FILTER_VALIDATE_MAC | 287 | 验证MAC地址(如00:1A:2B:3C:4D:5E) |
FILTER_VALIDATE_REGEXP | 272 | 按正则表达式验证(需通过options传正则) |
FILTER_VALIDATE_URL | 273 | 验证URL格式(支持http:///https://) |
FILTER_VALIDATE_DOMAIN | 277 | 验证域名(如example.com) |
清理过滤器(SANITIZE)
| 过滤器常量 | 值 | 作用说明 |
|---|
FILTER_SANITIZE_EMAIL | 517 | 清除邮箱非法字符(保留A-Za-z0-9@._-) |
FILTER_SANITIZE_ENCODED | 514 | URL编码特殊字符(类似urlencode()) |
FILTER_SANITIZE_NUMBER_FLOAT | 520 | 保留数字、小数点、正负号(如+3.14) |
FILTER_SANITIZE_NUMBER_INT | 519 | 仅保留数字和正负号(如-42) |
FILTER_SANITIZE_SPECIAL_CHARS | 515 | HTML转义特殊字符(< > & ' "转实体) |
FILTER_SANITIZE_FULL_SPECIAL_CHARS | 522 | 等同于htmlspecialchars() |
FILTER_SANITIZE_STRING | 513 | 去除HTML标签(PHP 8.1+已废弃) |
FILTER_SANITIZE_STRIPPED | 513 | FILTER_SANITIZE_STRING的别名 |
FILTER_SANITIZE_URL | 518 | 清除URL非法字符(保留`$-_.+!*'(),{}^~[]`等) |
FILTER_SANITIZE_ADD_SLASHES | 523 | 添加反斜杠转义引号(类似addslashes()) |
FILTER_UNSAFE_RAW | 516 | 不做过滤,但可通过标志控制行为(如FILTER_FLAG_STRIP_LOW) |
⚙️ 特殊类型
| 过滤器常量 | 值 | 作用说明 |
|---|
FILTER_DEFAULT | 516 | 默认过滤器(等同于FILTER_UNSAFE_RAW) |
FILTER_CALLBACK | 1024 | 自定义回调函数过滤(需通过options传函数) |
🔧 常用过滤标志(Flags)
通过$options参数传递:
FILTER_FLAG_STRIP_LOW:删除ASCII<32的字符
FILTER_FLAG_STRIP_HIGH:删除ASCII>127的字符
FILTER_FLAG_ALLOW_FRACTION:允许浮点数的小数部分
FILTER_FLAG_ALLOW_THOUSAND:允许千位分隔符(如1,000)
FILTER_FLAG_IPV4/FILTER_FLAG_IPV6:限定IP类型9
使用示例
// 验证整数(范围1-100)
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT, [
'options' => ['min_range' => 1, 'max_range' => 100]
]); :ml-citation{ref="4,8" data="citationList"}
// 清理URL参数
$url = filter_input(INPUT_GET, 'url', FILTER_SANITIZE_URL); :ml-citation{ref="3,9" data="citationList"}
// 自定义回调过滤
$data = filter_input(INPUT_POST, 'text', FILTER_CALLBACK, [
'options' => 'strip_tags'
]); :ml-citation{ref="5" data="citationList"}💡 提示:验证失败时返回false,未找到变量时返回null,清理过滤器始终返回字符串。