filter是PHP內建用來過濾和驗證字串
php filter有許多函式,以下列幾個較常用的
php filter函式:
函式 | 功用 |
---|---|
filter_list | 列出所有支援的filters |
filter_has_var | 檢查變數是已經存在(類似isset) |
filter_input | 針對外部(GET、POST等等)輸入進行過濾 |
filter_input_array | 針對陣列過濾,功能和filter_input相同 |
filter_var | 針對變數過濾 |
filter_var_array | 針對陣列過濾,功能和filter_var相同 |
另外每個filter函式參數裡可以再設定filter類型和filter option(更細部的條件)
常用的filter類型:
名稱 | 功用 |
---|---|
FILTER_CALLBACK | option可以讓開發者用自訂的function處理 |
FILTER_SANITIZE_STRING | 去除標籤或特殊字元(html標籤會直接被消除) |
FILTER_SANITIZE_ENCODED | 與urlencode()相同,過濾特殊字串 |
FILTER_SANITIZE_MAGIC_QUOTES | 過濾針對SQL injection做過濾(例如單、雙引號) |
FILTER_SANITIZE_SPECIAL_CHARS | 針對HTML做encoding,例如< |
FILTER_SANITIZE_EMAIL | 過濾e-mail,刪除e-mail格式不該出現的字元(除了$-_.+!*'{}|^~[]`#%/?@&=和數字),例如a(b)@gmail.com會被過濾成[email protected] |
FILTER_SANITIZE_URL | 過濾URL,刪除URL格式不該出現的字元 |
FILTER_SANITIZE_NUMBER_INT | 刪除所有字元,只留下數字與+-符號 |
FILTER_SANITIZE_NUMBER_FLOAT | 刪除所有字元,只留下數字和+-.,eE |
FILTER_VALIDATE_INT | 判斷數字是否有在範圍內 |
FILTER_VALIDATE_BOOLEAN | 判斷布林值,1、true、on、yes都會判斷成true,反之為false,若是這些以外的值會回傳NULL |
FILTER_VALIDATE_FLOAT | 判斷是否為浮點數 |
FILTER_VALIDATE_REGEXP | 利用regexp做驗證 |
FILTER_VALIDATE_URL | URL驗證 |
FILTER_VALIDATE_EMAIL | e-mail驗證 |
FILTER_VALIDATE_IP | IP驗證 |
搭配各個filter類型的細部filter option連結
另外為了讓操作方便,filter有特別針對幾個外部輸入($_GET或$_POST)設定成type參數
filter type:
- INPUT_GET
- INPUT_POST
- INPUT_COOKIE
- INPUT_SERVER
- INPUT_ENV
Example:
1.列出所有支援的filters
2.確定$_GET[test]變數是否存在
filter_has_var(type, variable_name)
3.將$_GET[test]變數內的字串做HTML encoding,並去除ASCII碼在32以下(如空白)的字元
filter_input(type, variable_name, filter, options)
4.一次過濾(不同條件)整個$_GET陣列
filter_input_array(type, definition)
&component=10&versions=2.0.33 $_GET = array( 'product_id' => 'libgd