PHP过滤器主要对用户上传的数据进行验证和清理,确保上传的数据完整安全。
比如我们可以通过PHP过滤器验证邮箱、电话号码或者URL这些既定格式;为了防止XSS攻击,可以使用PHP过滤器去除JavaScript、HTML代码。
PHP过滤器怎么用?
我们可以通过PHP内置的过滤器函数来进行过滤操作,下面让我们通过一张表格总览PHP过滤器的核心函数:
| 函数 | 功能 |
|---|---|
filter_var() | 使用指定的过滤器过滤单个变量 |
filter_var_array() | 获取多个变量并使用相同或不同的过滤器过滤它们 |
filter_input() | 通过名称获取特定的外部变量并过滤它 |
filter_input_array() | 获取多个外部变量并使用相同或不同的过滤器过滤它们 |
filter_list() | 返回所支持的过滤器列表 |
filter_id() | 返回与特定过滤器名称关联的过滤器ID |
filter_has_var() | 检查指定类型的变量是否存在 |
PHP过滤器分为两种类型,要么是验证数据,要么是清理数据:
1. 验证数据
对于一些特定的数据格式,我们可以使用fliter_var()函数+特定的过滤器参数来进行验证:
| 函数 | 功能 | 示例 |
|---|---|---|
filter_var() + FILTER_VALIDATE_EMAIL | 验证电子邮件格式 | filter_var('test@dotcpp.com', FILTER_VALIDATE_EMAIL) |
filter_var() + FILTER_VALIDATE_URL | 验证URL格式 | filter_var('https://www.dotcpp.com', FILTER_VALIDATE_URL) |
filter_var() + FILTER_VALIDATE_IP | 验证IP地址格式 | filter_var('192.168.1.1', FILTER_VALIDATE_IP) |
filter_var() + FILTER_VALIDATE_MAC | 验证MAC地址格式 | filter_var('00:1A:2B:3C:4D:5E', FILTER_VALIDATE_MAC) |
filter_var() + FILTER_VALIDATE_INT | 验证整数格式 | filter_var('123', FILTER_VALIDATE_INT) |
filter_var() + FILTER_VALIDATE_FLOAT | 验证浮点数格式 | filter_var('3.14', FILTER_VALIDATE_FLOAT) |
filter_var() + FILTER_VALIDATE_BOOLEAN | 验证布尔值格式 | filter_var('true', FILTER_VALIDATE_BOOLEAN) |
filter_var() + FILTER_VALIDATE_DOMAIN | 验证域名格式 | filter_var('dotcpp.com', FILTER_VALIDATE_DOMAIN) |
这里拿filter_var() + FILTER_VALIDATE_EMAIL举一个例子,验证上传数据的电子邮件格式:
<?php
/* filter_var() + FILTER_VALIDATE_EMAIL(验证电子邮件) */
$email="123456@dotcpp.com";
if(filter_var($email, FILTER_VALIDATE_EMAIL))
{
echo "电子邮件验证成功!";
}
else
{
echo '非法电子邮件格式,验证失败!';
}
?>进入test.php,我们可以看到“电子邮件验证成功!”。

2. 清理数据
对于一些非法数据,比如恶意的XSS攻击,我们就可以使用fliter_var()函数+特定的过滤器参数来进行清理:
| 函数 | 功能 |
|---|---|
filter_var() + FILTER_SANITIZE_EMAIL | 删除电子邮件中非法的字符 |
filter_var() + FILTER_SANITIZE_URL | 删除URL中非法的字符 |
filter_var() + FILTER_SANITIZE_NUMBER_INT | 删除数字中非数字的字符 |
filter_var() + FILTER_SANITIZE_NUMBER_FLOAT | 删除浮点数中非数字的字符(保留小数点) |
filter_var() + FILTER_SANITIZE_STRING | 删除或编码HTML标签 |
filter_var() + FILTER_SANITIZE_SPECIAL_CHARS | 将特殊字符转换为HTML实体 |
filter_var() + FILTER_SANITIZE_FULL_SPECIAL_CHARS | 转换所有特殊字符(包括单引号) |
一般都是通过filter_var() + FILTER_SANITIZE_STRING删除Javascript标签,来防止XSS攻击:
<?php
// 用户提交的表单数据
$user_input = '<script>alert("XSS攻击")</script>没有数据清理你就等着被脚本注入吧';
//使用 filter_var() 清理
$safe_output = filter_var($user_input, FILTER_SANITIZE_STRING);
echo "安全输出: " . $safe_output;
?>
这里会安全地显示文字,而没有进行alert弹窗,我们成功通过filter_var() + FILTER_SANITIZE_STRING删除Javascript标签,避免了脚本注入!
总之,PHP过滤器提高了输入数据的安全性和合法性,熟练运用PHP过滤器是PHP开发人员的必备基础技能。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程