主题
  • 默认模式
  • 浅蓝色模式
  • 淡绿色模式
  • 深夜模式

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_STRINGFILTER_VALIDATE_EMAILFILTER_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
发表评论