PHP 过滤器
PHP 过滤器主要用于对来自非可信来源的数据(如用户输入、外部API响应或数据库查询结果)进行安全验证和净化处理,确保数据符合预期的格式和安全性要求。这一机制能有效预防安全漏洞,如 SQL 注入、XSS 攻击等常见 Web 安全威胁。
常用的过滤函数
✅ PHP 提供了多种过滤函数来处理不同类型的数据:
filter_var()
- 通过一个指定的过滤器来过滤单一的变量filter_var_array()
- 通过相同的或不同的过滤器来过滤多个变量filter_input
- 获取一个输入变量,并对它进行过滤filter_input_array
- 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤
这些函数可以帮助开发者轻松地验证和净化数据,确保应用程序的安全性和稳定性。
使用 filter_var() 函数验证邮箱
✅ 在下面的实例中,我们用filter_var()
函数验证邮箱是否合法:
<?php
$email = "john.doe@kaicz.com";
// 验证邮箱
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "有效的邮箱地址";
} else {
echo "无效的邮箱地址";
}
?>
上面的代码使用了FILTER_VALIDATE_EMAIL
过滤器来过滤变量。由于这个变量是合法的,因此上面的代码将输出:
有效的邮箱地址
使用 filter_var_array() 和 filter_input_array() 函数过滤多个值
✅ 在下面的实例中,我们用filter_input_array()
函数过滤多个 POST 变量:
<?php
// 过滤多个POST变量
$filters = array(
'username' => FILTER_SANITIZE_STRING,
'email' => FILTER_VALIDATE_EMAIL,
'age' => array(
'filter' => FILTER_VALIDATE_INT,
'options' => array('min_range' => 18, 'max_range' => 100)
)
);
$result = filter_input_array(INPUT_POST, $filters);
?>
上面的代码使用了FILTER_SANITIZE_STRING
、FILTER_VALIDATE_EMAIL
、FILTER_VALIDATE_INT
多个过滤器来过滤多个变量。如果输入的值不合法,上面的代码将输出:
有效的用户名、有效的邮箱地址、年龄在 18 到 100 岁之间
使用 filter_input() 函数过滤输入变量
✅ 在下面的实例中,我们用filter_input()
从 GET 参数中获取名为age
的变量是否合法:
<?php
// 验证 GET 参数
$age = filter_input(INPUT_GET, 'age', FILTER_VALIDATE_INT);
if ($age === false) {
echo "年龄必须是整数";
}
?>
上面的代码使用了FILTER_VALIDATE_INT
过滤器验证是否为整数。如果age
变量不合法,代码将输出:
年龄必须是整数
自定义过滤器
✅ 在下面的实例中,我们用FILTER_CALLBACK
创建自定义过滤器:
<?php
function convertSpace($string) {
return str_replace("_", ".", $string);
}
$string = "www_kaicz_com";
echo filter_var($string, FILTER_CALLBACK, array("options" => "convertSpace"));
?>
上面的代码使用了FILTER_CALLBACK
创建了自定义过滤器。通过自定义过滤器,代码将输出:
www.kaicz.com
主要过滤器类型
✅ 验证过滤器 - 验证数据是否符合特定格式:
过滤器常量 | 描述 |
---|---|
FILTER_VALIDATE_BOOLEAN |
验证值是否为布尔值 对于"1", "true", "on" 和 "yes" 返回 true ,对于"0", "false", "off", "no" 和 "" 返回false |
FILTER_VALIDATE_EMAIL |
验证值是否为有效的电子邮件地址 |
FILTER_VALIDATE_FLOAT |
验证值是否为浮点数 |
FILTER_VALIDATE_INT |
验证值是否为整数 |
FILTER_VALIDATE_IP |
验证值是否为有效的 IP 地址(可选地验证 IPv4 或 IPv6) |
FILTER_VALIDATE_REGEXP |
根据正则表达式验证值 |
FILTER_VALIDATE_URL |
验证值是否为有效的 URL |
✅ 清理过滤器 - 删除或编码非法字符:
过滤器常量 | 描述 |
---|---|
FILTER_SANITIZE_EMAIL |
删除电子邮件地址中不合法的字符(保留字母、数字和!#$%&'*+-/=?^_`{|}~@.[] ) |
FILTER_SANITIZE_ENCODED |
URL 编码字符串,处理特殊字符(类似urlencode() ) |
FILTER_SANITIZE_NUMBER_FLOAT |
删除浮点数中非法的字符(保留数字、+ 、- 和.,eE ) |
FILTER_SANITIZE_NUMBER_INT |
删除整数中非法的字符(仅保留数字、+ 和- ) |
FILTER_SANITIZE_SPECIAL_CHARS |
转义 HTML 特殊字符(类似htmlspecialchars() ) |
FILTER_SANITIZE_STRING (PHP 8.1+ 已废弃) |
删除或转义字符串中的标签和特殊字符(建议使用FILTER_SANITIZE_FULL_SPECIAL_CHARS 替代) |
FILTER_SANITIZE_URL |
删除 URL 中非法的字符(保留字母、数字和$-_.+!*'(),{}|\\^~[]`<>#%";/?:@&= ) |
评论区 0
发表评论
教程介绍
PHP 通用开源服务器端脚本语言,特别适用于 Web 开发,能够嵌入 HTML 中使用。
42
章节
33
阅读
0
评论
反馈提交成功
感谢您的反馈,我们将尽快处理您的反馈