上一节我们详细讲解了PHP中的过滤器,本节我们将从实际出发,看看PHP过滤器在实例中该如何运用。
情景:准备一个表单提交页面(up.php),会提交用户的姓名、年龄、电话号码、qq邮箱,提交到处理页面(process.php),处理页面会进行数据过滤,将上传数据转义HTML、特殊字符,并安全地将用户信息进行展示:
1. up.php:简单的表单提交功能,通过method="POST"的方式action="process.php"提交到process.php,总共4个字段,name、phone、age、email。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>用户信息提交 - PHP过滤器演示</title>
</head>
<body>
<h1>Dotcpp编程-PHP教程</h1>
<h2>PHP过滤器演示</h2>
<form action="process.php" method="POST">
<h3>基本信息</h3>
<p>
<strong>姓名:</strong><br>
<input type="text" name="name"
value="Dotcpp用户<script>alert('我要弹窗之XSS攻击!')</script>">
<br>
<small>请填写真实姓名(2-20个字符)</small>
</p>
<p>
<strong>年龄:</strong><br>
<input type="number" name="age" value="18">
<br>
<small>年龄范围:1-120岁</small>
</p>
<p>
<strong>电话号码:</strong><br>
<input type="tel" name="phone"
value="仅收集数字字符13800138000 dotcpp.com">
<br>
<small>请输入11位手机号码</small>
</p>
<p>
<strong>QQ邮箱:</strong><br>
<input type="email" name="email"
value="123456@qq.com">
<br>
<small>请输入QQ邮箱地址</small>
</p>
<button>提交</button>
</form>
</body>
</html>2. process.php:首先先通过$_SERVER['REQUEST_METHOD'] !== 'POST')检查是否是POST过来的数据,获取4个字段的值后进行数据过滤和验证,具体表现为:
姓名部分通过htmlspecialchars()函数转义HTML代码;
年龄部分通过filter_var($age, FILTER_VALIDATE_INT)来验证是否为整数且通过第三个参数[ 'options' => ['min_range' => 1, 'max_range' => 120]]来指定判断区间[1-120];
电话号码通过filter_var($phone, FILTER_SANITIZE_NUMBER_INT)提取数字字符,然后补一个正则表达式验证是不是中国大陆电话格式;
qq邮箱部分先通过filter_var($email, FILTER_VALIDATE_EMAIL)进行qq邮箱格式验证,然后再通过htmlspecialchars()函数转义HTML代码安全显示。
<?php
// process.php
// 1. 检查请求
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
die("请通过表单提交数据");
}
// 2. 获取数据
$name = $_POST['name'] ?? '';
$age = $_POST['age'] ?? '';
$phone = $_POST['phone'] ?? '';
$email = $_POST['email'] ?? '';
// 3. 使用PHP过滤器处理
echo "<h2>PHP过滤器处理结果</h2>";
// 3.1 姓名:转义HTML字符(防止XSS)
$safe_name = htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
echo "<p><strong>姓名:</strong>{$safe_name}</p>";
// 3.2 年龄:验证整数和范围
$valid_age = filter_var($age, FILTER_VALIDATE_INT, [
'options' => ['min_range' => 1, 'max_range' => 120]
]);
echo "<p><strong>年龄:</strong>" . ($valid_age ? $valid_age : '<span >无效</span>') . "</p>";
// 3.3 电话:清理并验证
$clean_phone = filter_var($phone, FILTER_SANITIZE_NUMBER_INT);
$is_phone_valid = preg_match('/^1[3-9]\d{9}$/', $clean_phone);
echo "<p><strong>电话:</strong>{$clean_phone} " .
($is_phone_valid ? '<span >有效</span>' : '<span >无效</span>') .
"</p>";
// 3.4 邮箱:先清理再验证并安全显示
$clean_email = htmlspecialchars($email, ENT_QUOTES, 'UTF-8'); // 安全显示
$is_email_valid = filter_var($email, FILTER_VALIDATE_EMAIL);
echo "<p><strong>邮箱:</strong>{$clean_email} " .
($is_email_valid ? '<span >有效</span>' : '<span >无效</span>') .
"</p>";
// 4. 返回链接
echo '<p><a href="up.php">返回表单</a></p>';
?>3. 效果展示:
3.1 先访问up.php:

3.2 都有默认值填写好了,process.php会对表单进行处理,处理结果如下:

主要是通过PHP内置的过滤函数对上传数据进行验证和清理,确保数据安全可靠。
总结:PHP数据过滤器应用于多种场景,比如处理用户输入、表单提交和外部数据源等,所以PHP过滤器对于PHP开发人员来说十分重要!
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程