PHP 过滤器

在本教程中,您将学习如何清理和验证PHP中的用户输入。

使用过滤器验证和清理数据

清理和验证用户输入是Web应用程序中最常见的任务之一。为了简化此任务,PHP提供了本机筛选器扩展,可用于清理或验证数据,例如电子邮件地址,URL,IP地址等。

要使用过滤器扩展来验证数据,您需要使用PHP的filter_var()功能。该函数的基本语法可以通过以下方式给出:

filter_var(variable, filter, options)

此函数带有三个参数,其中最后两个是可选的。第一个参数是要过滤的值,第二个参数是要应用的过滤器的ID,第三个参数是与过滤器相关的选项数组。让我们看看它是如何工作的。

清理字符串

以下示例将通过删除字符串中的所有HTML标记来清理字符串:

<?php
//示例用户注释
$comment = "<h1>嘿! 今天过得好吗?</h1>";
 
//清理并打印注释字符串
$sanitizedComment = filter_var($comment, FILTER_SANITIZE_STRING);
echo $sanitizedComment;
?>
测试看看‹/›

上面示例的输出如下所示:

嘿! 今天过得好吗

验证整数值

下面的示例将验证该值是否为有效整数。

<?php
// 示例整数值
$int = 20;
 
// 验证整数值
if(filter_var($int, FILTER_VALIDATE_INT)){
    echo "<b>$int</b>是一个有效的整数";
} else{
    echo "<b>$int</b>不是有效的整数";
}
?>
测试看看‹/›

在上面的示例中,如果将变量$int设置为0,则示例代码将显示无效的整数消息。要解决此问题,您需要显式测试值0,如下所示:

<?php
//示例整数值
$int = 0;
 
// Validate sample integer value
if(filter_var($int, FILTER_VALIDATE_INT) === 0 || filter_var($int, FILTER_VALIDATE_INT)){
    echo "The <b>$int</b> 是有效整数";
} else{
    echo "The <b>$int</b> 不是有效的整数";
}
?>
测试看看‹/›

验证IP地址

下面的示例将验证该值是否是有效的IP地址。

<?php
// IP 地址
$ip = "172.16.254.1";
 
// 验证示例IP地址
if(filter_var($ip, FILTER_VALIDATE_IP)){
    echo "<b>$ip</b> 是有效的IP地址";
} else {
    echo "<b>$ip</b> 不是有效的IP地址";
}
?>
测试看看‹/›

您可以分别使用FILTER_FLAG_IPV4或FILTER_FLAG_IPV6标志进一步对IPV4或IPV6 IP地址应用验证。这是一个实例:

<?php
// IP 地址
$ip = "172.16.254.1";
 
// 验证示例IP地址
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)){
    echo "<b>$ip</b> 是有效的IPV6地址";
} else {
    echo "<b>$ip</b> 不是有效的IPV6地址";
}
?>
测试看看‹/›

清理和验证电子邮件地址

下面的示例将向您展示如何清理和验证电子邮件地址。

<?php
// email 地址
$email = "someone@@example.com";
 
//从电子邮件中删除所有非法字符
$sanitizedEmail = filter_var($email, FILTER_SANITIZE_EMAIL);
 
//验证电子邮件地址
if($email == $sanitizedEmail && filter_var($email, FILTER_VALIDATE_EMAIL)){
    echo "$email 是有效的电子邮件地址";
} else{
    echo "$email 不是有效的电子邮件地址";
}
?>
测试看看‹/›

注:FILTER_SANITIZE_EMAIL过滤器由除字母,数字和所提供的电子邮件地址字符串删除所有无效字符!#$%&'*+-=?^_`{|}~@.[]。

清理和验证URL

以下示例将向您展示如何清理和验证URL。

<?php
//  url 示例
$url = "http:://www.example.com";
 
//从网址中删除所有非法字符
$sanitizedUrl = filter_var($url, FILTER_SANITIZE_URL);
 
// 验证网站URL
if($url == $sanitizedUrl && filter_var($url, FILTER_VALIDATE_URL)){
    echo "$url 是有效的网站网址";
} else{
    echo "$url 不是有效的网站网址";
}
?>
测试看看‹/›

注意:FILTER_SANITIZE_URL过滤器由除字母,数字和所提供的URL字符串中删除所有无效字符$-_.+!*'(),{}|\\^~[]`<>#%";/?:@&=。

您还可以使用flag来检查URL是否包含查询字符串FILTER_FLAG_QUERY_REQUIRED,如以下示例所示:

<?php
//url
$url = "http://www.example.com?topic=filters";
 
//验证网站网址以获取查询字符串
if(filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED)){
    echo "<b>$url</b> 包含查询字符串";
} else{
    echo "<b>$url</b> 不包含查询字符串";
}
?>
测试看看‹/›

请参考HTML URL教程,以了解URL的不同组成部分。

验证范围内的整数

以下示例将验证提供的值是否为整数,以及它是否在0到100的范围内。

<?php
// 示例整数值
$int = 75;
 
//验证样本整数值
if(filter_var($int, FILTER_VALIDATE_INT, array("options" => array("min_range" => 0,"max_range" => 100)))){
    echo "<b>$int</b> 在0到100的范围内";
} else{
    echo "<b>$int</b> 不在0到100的范围内";
}
?>
测试看看‹/›