PHP的過濾器是用來驗證和過濾數據來自不安全的來源,比如用戶輸入。
-------------------------------------------------- ------------------------------
什麼是PHP的過濾器?
了一個PHP過濾器是用來驗證和過濾數據來自不安全的來源。
為了測試,驗證和過濾用戶輸入的或定制的數據是一個重要組成部分,任何網絡應用。
PHP的過濾器擴展的目的是使數據過濾更容易和更快。
-------------------------------------------------- ------------------------------
為什麼要使用過濾器?
幾乎所有的網絡應用依賴於外部輸入。通常這是來自用戶或其他應用程序(如Web服務) 。通過使用過濾器,您可以確保您的申請得到正確的輸入類型。
你應該總是過濾所有的外部數據!
輸入過濾是最重要的一個應用程序的安全問題。
什麼是外部數據?
輸入數據從一種形式
曲奇
Web服務數據
服務器變量
數據庫查詢結果
-------------------------------------------------- ------------------------------
功能和過濾器
要篩選一個變量,使用下列其中一個過濾功能:
filter_var ( ) -過濾器的單一變量指定的過濾器
filter_var_array ( ) -過濾一些變數與相同或不同的過濾器
filter_input -獲取一個輸入變量和篩選,
filter_input_array -獲取幾個輸入變量和過濾這些相同或不同的過濾器
在下面的例子中,我們驗證一個整數使用filter_var ( )函數:
<?php $int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT)) { echo("Integer is not valid"); } else { echo("Integer is valid"); } ?>
上述的程式碼使用“ FILTER_VALIDATE_INT ”過濾器來過濾變數。由於整數是有效的,產出的以上代碼將是: “整數是有效的。 ”
如果我們嘗試了變數,不是整數(如“ 123abc ” ) ,輸出將是: “整數是無效的” 。
如需完整清單的功能和過濾器,請訪問我們的PHP濾波器參考。
-------------------------------------------------- ------------------------------
驗證和消毒
有兩種過濾器:
驗證過濾器:
是用來驗證用戶輸入
嚴格的格式規則(如網址或e - mail驗證)
預期收益型成功或FALSE失敗
消毒過濾器:
被用來允許或拒絕特定字符的字符串
沒有任何數據格式規則
隨時返回字符串
-------------------------------------------------- ------------------------------
選項和旗幟
選擇和旗幟是用來添加額外的過濾選項到指定的過濾器。
不同的過濾器有不同的選擇和旗幟。
在下面的例子中,我們驗證一個整數使用filter_var ( )和“ min_range ”和“ max_range ”選項:
<?php $var=300;$int_options = array( "options"=>array ( "min_range"=>0, "max_range"=>256 ) );if(!filter_var($var, FILTER_VALIDATE_INT, $int_options)) { echo("Integer is not valid"); } else { echo("Integer is valid"); } ?>像上面的代碼,選擇必須建立在一個關聯數組的名稱“選項” 。如果一個標志使用它並不需要在一個數組。
由於整數是“ 300 ”這不是在指定的范圍內,輸出的代碼段將是: “整數是無效的” 。
如需完整清單的功能和過濾器,請訪問我們的PHP濾波器參考。檢查每一個過濾器,看看選擇和旗幟可用。
-------------------------------------------------- ------------------------------
驗證輸入
讓我們嘗試驗證投入的一種形式。
首先,我們需要做的是,以確認輸入的數據,我們正在尋找存在。
然後,我們過濾器輸入數據使用filter_input ( )函數。
在下面的例子中,輸入變量“電子郵件”發送到PHP頁面:
<?php if(!filter_has_var(INPUT_GET, "email")) { echo("Input type does not exist"); } else { if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)) { echo "E-Mail is not valid"; } else { echo "E-Mail is valid"; } } ?>例如解釋
上面的例子中有一個輸入(電子郵件)給它用“獲得”的方法:
如果檢查“電子郵件”輸入變量的“獲取”型存在
如果輸入變量存在,檢查是否是一個有效的e - mail地址
-------------------------------------------------- ------------------------------
淨化輸入
讓我們嘗試清理的網址發出的一種形式。
首先,我們確認,輸入數據,我們正在尋找存在。
然後,我們清理輸入數據使用filter_input ( )函數。
在下面的例子中,輸入變量“網址”發送到PHP頁面:
<?php if(!filter_has_var(INPUT_POST, "url")) { echo("Input type does not exist"); } else { $url = filter_input(INPUT_POST, "url", FILTER_SANITIZE_URL); } ?>例如解釋
上面的例子中的輸入器( URL )發送給它使用“郵報”的方法:
如果選中“網址”輸入“後”型存在
如果輸入變量存在,淨化(拿走無效字符) ,並存儲在變量$網址
如果輸入變量是一個字符串這樣的“ http://www.W3ååSchøøools.com/ ” ,網址為可變後的消毒看起來就像這樣:
www.111cn.net
過濾器多投入
表單幾乎總是由一個以上的輸入欄位。為了避免呼叫filter_var或filter_input職能,多,我們可以使用filter_var_array或filter_input_array職能。
在這個例子中我們使用filter_input_array ( )函數來篩選三個的GET的變數。在收到的GET變量是一個名字,年齡和e - mail地址:
<?php $filters = array ( "name" => array ( "filter"=>FILTER_SANITIZE_STRING ), "age" => array ( "filter"=>FILTER_VALIDATE_INT, "options"=>array ( "min_range"=>1, "max_range"=>120 ) ), "email"=> FILTER_VALIDATE_EMAIL, );$result = filter_input_array(INPUT_GET, $filters);if (!$result["age"]) { echo("Age must be a number between 1 and 120.<br />"); } elseif(!$result["email"]) { echo("E-Mail is not valid.<br />"); } else { echo("User input is valid"); } ?>
例如解釋
上面的例子中有三個輸入(姓名,年齡和電子郵件)發送給它用“獲得”的方法:
設置一個數組包含的名稱輸入變量和使用的過濾器在指定的輸入變量
呼叫filter_input_array ( )函數與輸入變量的GET和數組我們剛才設置
檢查“年齡”和“電子郵件”變數$結果變量為無效的投入。 (如果其中任何一個輸入變量是無效的,即輸入變量將是假的後, filter_input_array ( )函數)
第二個參數的filter_input_array ( )函數可以是一個數組或一個過濾器編號。
如果參數是一個單一的過濾器編號中所有的值輸入數組過濾指定的過濾器。
如果參數是一個數組它必須遵循這些規則:
必須是一個關聯數組包含一個輸入變量作為數組的關鍵(如“年齡”輸入變量)
數組值必須是一個過濾器的ID或陣列指定過濾器,旗幟和選擇
-------------------------------------------------- ------------------------------
利用過濾器回調
可能是調用用戶定義的功能和使用它作為一個過濾器使用FILTER_CALLBACK過濾器。這樣一來,我們已經完全控制數據過濾。
您可以創建自己的用戶定義的函數或使用現有的PHP函數
功能要使用指定的過濾器以同樣的方式作為一種選擇是指定的。在一個關聯數組的名稱“選項”
在下面的例子中,我們使用用戶創建功能把所有“ _ ”為空格:
<?php function convertSpace($string) { return str_replace("_", " ", $string); } $string = "Peter_is_a_great_guy!"; echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace")); ?>輸出如Peter is a great guy!例如解釋
上面的例子中轉換所有“ _ ”為空格:
創建一個函數來取代“ _ ” ,以空格
呼叫filter_var ( )函數與FILTER_CALLBACK過濾器和一個數組包含我們的功能