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_IPV4FILTER_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";
}
?>

請參閱 HTML URL 教程以瞭解 URL 的不同元件。

驗證範圍內的整數

以下示例將驗證提供的值是否為整數,以及它是否在 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";
}
?>