PHP 基础教程
PHP 高级教程
PHP & MySQL DATABASE
PHP 示例
PHP 参考手册

PHP 过滤器

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

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

清理和验证用户输入是 Web 应用程序中最常见的任务之一。 为了使这项任务更容易,PHP 提供了原生过滤器扩展,您可以使用它来清理或验证数据,例如电子邮件地址、URL、IP 地址等。

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

filter_var(variable, filter, options)

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

清理字符串

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

<?php
// Sample user comment
$comment = "<h1>Hey there! How are you doing today?</h1>";
 
// 清理并打印注释字符串
$sanitizedComment = filter_var($comment, FILTER_SANITIZE_STRING);
echo $sanitizedComment;
?>

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

Hey there! How are you doing today?

验证整数值

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

<?php
// Sample integer value
$int = 20;
 
// 验证样本整数值
if(filter_var($int, FILTER_VALIDATE_INT)){
    echo "The <b>$int</b> is a valid integer";
} else{
    echo "The <b>$int</b> is not a valid integer";
}
?>

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

<?php
// Sample integer value
$int = 0;
 
// 验证样本整数值
if(filter_var($int, FILTER_VALIDATE_INT) === 0 || filter_var($int, FILTER_VALIDATE_INT)){
    echo "The <b>$int</b> is a valid integer";
} else{
    echo "The <b>$int</b> is not a valid integer";
}
?>

验证 IP 地址

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

<?php
// 示例 IP 地址
$ip = "172.16.254.1";
 
// 验证示例 IP 地址
if(filter_var($ip, FILTER_VALIDATE_IP)){
    echo "The <b>$ip</b> is a valid IP address";
} else {
    echo "The <b>$ip</b> is not a valid IP address";
}
?>

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

<?php
// 示例 IP 地址
$ip = "172.16.254.1";
 
// 验证示例 IP 地址
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)){
    echo "The <b>$ip</b> is a valid IPV6 address";
} else {
    echo "The <b>$ip</b> is not a valid IPV6 address";
}
?>

清理和验证电子邮件地址

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

<?php
// 示例电子邮件地址
$email = "someone@@example.com";
 
// 删除电子邮件中的所有非法字符
$sanitizedEmail = filter_var($email, FILTER_SANITIZE_EMAIL);
 
// 验证电子邮件地址
if($email == $sanitizedEmail && filter_var($email, FILTER_VALIDATE_EMAIL)){
    echo "The $email is a valid email address";
} else{
    echo "The $email is not a valid email address";
}
?>

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


清理和验证 URL

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

<?php
// 示例网址
$url = "http:://www.example.com";
 
// 从url中删除所有非法字符
$sanitizedUrl = filter_var($url, FILTER_SANITIZE_URL);
 
// 验证网站地址
if($url == $sanitizedUrl && filter_var($url, FILTER_VALIDATE_URL)){
    echo "The $url is a valid website url";
} else{
    echo "The $url is not a valid website url";
}
?>

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

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

<?php
// 示例网址
$url = "http://www.example.com?topic=filters";
 
// 验证查询字符串的网站 url
if(filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED)){
    echo "The <b>$url</b> contains query string";
} else{
    echo "The <b>$url</b> does not contain query string";
}
?>

请参阅有关 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 "The <b>$int</b> is within the range of 0 to 100";
} else{
    echo "The <b>$int</b> is not within the range of 0 to 100";
}
?>
Advertisements