filter,它的作用就和他的名字一樣——過濾。filter內建了多個常用過濾器,根據過濾器功能的不同,可以分成淨化過濾器(sanitization)和驗證過濾器(validation)兩種。兩種的差別在於,淨化過濾器會把被過濾的變數中不符合規則的東西清除掉,返回清除後的內容;而驗證過濾器只是驗證的功能,並不會去改變變數的值,如果符合過濾器的規則,則返回變數內容,否則返回false;
filter的安裝很簡單,如果是php5.2.0之後的版本,應該已經預設開啟了,可以通過phpinfo()來檢視。如果5.2.0之前的版本,可以使用pecl來使用filter
使用filter來過濾或驗證資料很簡單,下面是乙個簡單的例子
<?php
$email1 = '[email protected]';
$email2 = "example.org";
$email3 = "([email protected])";
var_dump(filter_var($email1,filter_validate_email));
var_dump(filter_var($email2,filter_validate_email));
var_dump(filter_var($email3,filter_sanitize_email));
?>
執行上面的例子,你可以知道,filter_var($var,$filter)函式是使用過濾器$filter來過濾變數$var,而透過結果來分析,filter_validate_email過濾器只是驗證變數$email是否負責過濾器規定的規則,符合要求則返回變數內容,不符合則返回false;而filter_sanize_email則是對變數的內容進行淨化,把不負責規則的內容都清除,然後返回清除後的結果。
<?php
$int = 10;
var_dump(filter_var($int,filter_validate_int)); # 輸出int(10)
$options = array('options'=>array('min_range'=>15));
var_dump(filter_var($int,filter_validate_int,$options));#輸出bool(false)
?>
同樣的整形變數10,在我第二個過濾器中加兩個配置引數,最小值為15,10不滿足這個條件,所以返回fasle
再看下面這個例子
<?php
$int = '0xf';
var_dump(filter_var($int,filter_validate_int)); # 輸出bool(false)
$options = array('options'=>array('min_range'=>15),'flags'=>filter_flag_allow_hex);
var_dump(filter_var($int,filter_validate_int,$options));#輸出int(15)
?>
預設filter_validate_int過濾認為'0xf'不是整形變數,但是加了flags附件引數filter_flag_allow_hex進去,filter_flag_allow_hex引數是允許使用十六進製制的意思,'0xf'轉化為十六進製制等於15,符合規則,返回15
注意:$options引數是乙個陣列,包含兩個元素:選項options(陣列)和標記flags。若是只有flags元素,則也可以直接傳遞而不用陣列。
選項options為一陣列。陣列關鍵字必須為:選項名稱。比如filter_validate_int中的選項名稱有min_range、max_range;filter_validate_float中的選項名稱有decimal,filter_validate_regexp中的選項名稱有regexp。陣列值根據選項名稱由使用者定義。比如min_range表示最小值過濾。比如:$options = array('options'=>array('min_range'=>3));那麼小於3的數字將無法通過驗證。
例項:
<?php
$options = array();
$options['options']['min_range'] = 1;
$options['options']['max_range'] = 10;
$options['flags'] = filter_flag_allow_octal;
filter_var(3, filter_validate_int, $options);
?>
例項
<?php
$foo = '256';
$bar = '0x100';
var_dump(validate_int($foo)); // false, too large
var_dump(validate_int($bar)); // false, too large
function validate_int($input)
?>
例項
<?php
echo "|asdf".chr(9).chr(128)."_123|";
echo "\n";
// "bitwise conjunction" means logic or / bitwise |
echo filter_var("|asdf".chr(9).chr(128)."_123\n|" ,filter_sanitize_string, filter_flag_strip_low | filter_flag_strip_high);
/*results:
|asdf �_123|
|asdf_123|
*/?>
如果系統自帶的驗證過濾器無法滿足現實需要,我們可以通過filter_validate_regexp 過濾器來對資料進行驗證。
<?php
//比如查詢關鍵字,要排除'、"、<、>、=字元,並限定關鍵字長度
if(!filter_input(input_get,'keyword',filter_validate_regexp,array("options"=>array("regexp"=>"/^(^('|\"|<|>|=))/"))))
exit('關鍵字不符合要求');
else
echo 'vaild';
?>
定義和用法:filter_callback 過濾器使用使用者自定義函式對值進行過濾。這個過濾器為我們提供了對資料過濾的完全控制。
指定的函式必須存入名為 "options" 的關聯陣列中。
請參見下面的例子。
例子 1:呼叫自定義函式
<?php
function convertspace($string)
$string = "peter is a great guy!";
echo filter_var($string, filter_callback,array("options"=>"convertspace"));
?>
輸出:peter_is_a_great_guy!
例子 2:呼叫系統函式
<?php
$string="peter is a great guy!";
echo filter_var($string, filter_callback,array("options"=>"strtoupper"));
?>
輸出:peter is a great guy!
例子 3:呼叫類方法
<?php
class myfilter
}echo filter_var('wo9w9w9',filter_callback,array('options'=>array('myfilter','filter1')));//呼叫類方法
?>
通過這種方式,就可以自定義乙個過濾規則,通過filter_callback過濾器來過濾了
1、2、
3、
本文參考:
php的filter擴充套件小技巧
做為乙個合格的web開發人員,一定會牢記乙個原則 永遠不能相信使用者輸入的資料,行走江湖,安全第一是很重要的。使用者通過表單或url傳過來的資料,一定要仔細檢查過了,才往後臺資料庫裡存進去。在乙個成熟的開發團隊裡,貫徹這個原則不成問題 但是如果在乙個新人老手混搭的小team裡,很容易就忽視了這個問題...
Logstash詳解之 filter模組
logstash三個元件的第二個元件,也是真個logstash工具中最複雜,最蛋疼的乙個元件,當然,也是最有作用的乙個元件。1 grok外掛程式 grok外掛程式有非常強大的功能,他能匹配一切資料,但是他的效能和對資源的損耗同樣讓人詬病。filter 2 mutate外掛程式 mutate外掛程式是...
php的擴充套件php curl例項詳解
curl傳送請求的例項在網上搜尋,php的擴充套件php curl例項詳解類似的文章可以搜到很多,但是為什麼還要寫這篇呢,因為發現網上大多在頁面上的排版都挺亂的,看起來比較吃力,例項 也不整齊,所以乾脆重新測試重新編寫 吧,就當是備忘錄吧。一 平時我們傳送請求採用的方式 一般使用如下的方式 str ...