在之前的文章中給大家?guī)砹恕禤HP表單學(xué)習(xí)之$_GET與$_POST變量的使用與區(qū)別》,其中詳細的給大家?guī)砹薖HP中$_GET 變量與$_POST 變量的相關(guān)知識,本篇文章我們來看一下PHP中的過濾器相關(guān)知識,希望能夠幫助到大家!
在之前的文章中我們學(xué)習(xí)了$_GET
變量與$_POST
變量的相關(guān)知識,其中有提到關(guān)于安全性的問題,本篇文章中所要講到的PHP過濾器就是用于驗證和過濾來自非安全來源的數(shù)據(jù),比如用戶的輸入。那接下來我們就來看一下PHP中的過濾器的相關(guān)知識,一起看看吧。
PHP過濾器
什么是過濾器,可以先把過濾器簡單的理解為過濾掉不安全的數(shù)據(jù)。那我們?yōu)槭裁匆褂眠^了不起呢?在我們的日常開發(fā)中幾乎所有的Web應(yīng)用程序都會依賴外部的輸入,這些數(shù)據(jù)通常都是來自類似Web服務(wù)的其他應(yīng)用程序或者來自用戶。我們通過過濾器的使用能夠確保應(yīng)用程序能夠獲得正確的輸入類型。
我們應(yīng)該對像來自表單的輸入數(shù)據(jù)、Cookies、服務(wù)器變量和數(shù)據(jù)庫查詢結(jié)果等這樣的外部數(shù)據(jù)進行過濾,對輸入進行過濾是很重要的,因此我們需要使用過濾器。
PHP過濾器是用于驗證和過濾來自非安全來源的數(shù)據(jù),是測試、驗證和過濾用戶輸入或者自定義數(shù)據(jù)時任何Web應(yīng)用程序的重要組成部分,它的設(shè)計目的就是為了是數(shù)據(jù)處理更輕松快捷。
函數(shù)和過濾器
當(dāng)我們需要過濾變量的時候,可以使用很多過濾函數(shù):filter_var()
通過一個指定的過濾器來過濾單一的變量;filter_var_array()
通過相同的或不同的過濾器來過濾多個變量;filter_input
獲取一個輸入變量,并對它進行過濾;filter_input_array
獲取多個輸入變量,并通過相同的或不同的過濾器對它們進行過濾。
接下來我們通過一個示例來看一下通過filter_var()
函數(shù)驗證了一個整數(shù),示例如下:
<?php header("Content-type:text/html;charset=utf-8"); $int = 123; if(!filter_var($int, FILTER_VALIDATE_INT)) { echo("不是一個合法的整數(shù)"); } else { echo("是個合法的整數(shù)"); } ?>
輸出結(jié)果:
上述示例便是通過filter_var() 過濾函數(shù)來驗證了一個整數(shù),接下來看一下我們常用的兩種過濾器。
-
Validating
過濾器:用于驗證用戶輸入,有著嚴格的格式規(guī)則(比如 URL 或 E-Mail 驗證),如果成功則返回預(yù)期的類型,如果失敗則返回 FALSE。 -
Sanitizing
過濾器:用于允許或禁止字符串中指定的字符,無數(shù)據(jù)格式規(guī)則,始終返回字符串。
選項和標志
選項和標志用于向指定的過濾器添加額外的過濾選項。不同的過濾器有不同的選項和標志。
接下來我們通過示例來看一下用 filter_var()
和 "min_range"
以及 "max_range"
選項驗證了一個整數(shù),示例如下:
<?php header("Content-type:text/html;charset=utf-8"); $var=300; $int_options = array( "options"=>array ( "min_range"=>0, //最小值 "max_range"=>256 //最大值 ) ); if(!filter_var($var, FILTER_VALIDATE_INT, $int_options)) { echo("不是一個合法的整數(shù)"); } else { echo("是個合法的整數(shù)"); } ?>
輸出結(jié)果:
在上述示例中,需要注意的是:就像上面的代碼一樣,選項必須放入一個名為 "options" 的相關(guān)數(shù)組中。如果使用標志,則不需在數(shù)組內(nèi)。由于整數(shù)是 "300",它不在指定的范圍內(nèi),所以輸出結(jié)果如上。
驗證輸入
接下來讓我們試著驗證來自表單的輸入。我們需要做的第一件事情是確認是否存在我們正在查找的輸入數(shù)據(jù)。然后我們用 filter_input()
函數(shù)過濾輸入的數(shù)據(jù)。
接下來我們通過示例來看一下以GET的方式輸入變量 "email" 被傳到 PHP 頁面,示例如下:
<?php header("Content-type:text/html;charset=utf-8"); if(!filter_has_var(INPUT_GET, "email")) { echo("沒有 email 參數(shù)"); } else { if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)) { echo "不是一個合法的 E-Mail"; } else { echo "是一個合法的 E-Mail"; } } ?>
輸出結(jié)果:
其中我們需要注意的是:上面的實例有一個通過 "GET" 方法傳送的輸入變量 (email),檢測是否存在 "GET" 類型的 "email" 輸入變量,如果存在輸入變量,檢測它是否是有效的 e-mail 地址。
凈化輸入
讓我們試著清理一下從表單傳來的 URL。首先,我們要確認是否存在我們正在查找的輸入數(shù)據(jù)。然后,我們用 filter_input()
函數(shù)來凈化輸入數(shù)據(jù)。
下面我們通過示例來看一下輸入變量 "url" 被傳到 PHP 頁面,示例如下:
<?php header("Content-type:text/html;charset=utf-8"); if(!filter_has_var(INPUT_GET, "url")) { echo("沒有 url 參數(shù)"); } else { $url = filter_input(INPUT_GET, "url", FILTER_SANITIZE_URL); echo $url; } ?>
輸出結(jié)果:
其中我們需要注意的是:
FILTER_SANITIZE_URL 過濾器刪除字符串中所有非法的 URL 字符。上面的實例有一個通過 "GET" 方法傳送的輸入變量 (url):檢測是否存在 "GET" 類型的 "url" 輸入變量,如果存在此輸入變量,對其進行凈化(刪除非法字符),并將其存儲在 $url 變量中。
大家如果感興趣的話,可以點擊《PHP視頻教程》進行