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>";
// Sanitize and print comment string
$sanitizedComment = filter_var($comment, FILTER_SANITIZE_STRING);
echo $sanitizedComment;
?>
上面示例的输出将如下所示:
Hey there! How are you doing today?
验证整数值
以下示例将验证该值是否为有效整数。
<?php
// Sample integer value
$int = 20;
// Validate sample integer value
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;
// Validate sample integer value
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
// Sample IP address
$ip = "172.16.254.1";
// Validate sample IP address
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_IPV4
或 FILTER_FLAG_IPV6
标记进一步对 IPV4 或 IPV6 IP 地址应用验证。这是一个例子:
<?php
// Sample IP address
$ip = "172.16.254.1";
// Validate sample IP address
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
// Sample email address
$email = "someone@@example.com";
// Remove all illegal characters from email
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
// Validate e-mail address
if(filter_var($email, FILTER_VALIDATE_EMAIL)){
echo "The <b>$email</b> is a valid email address";
} else{
echo "The <b>$email</b> is not a valid email address";
}
?>
清理和验证网址
以下示例将向你展示如何清理和验证 URL。
<?php
// Sample website url
$url = "http:://www.example.com";
// Remove all illegal characters from url
$url = filter_var($url, FILTER_SANITIZE_URL);
// Validate website url
if(filter_var($url, FILTER_VALIDATE_URL)){
echo "The <b>$url</b> is a valid website url";
} else{
echo "The <b>$url</b> is not a valid website url";
}
?>
你还可以使用标志检查 URL 是否包含查询字符串 FILTER_FLAG_QUERY_REQUIRED
,如以下示例所示:
<?php
// Sample website url
$url = "http://www.example.com?topic=filters";
// Validate website url for query string
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";
}
?>
验证范围内的整数
以下示例将验证提供的值是否为整数,以及它是否在 0 到 100 的范围内。
<?php
// Sample integer value
$int = 75;
// Validate sample integer value
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";
}
?>