php 数据过滤
在對用戶輸入數(shù)據(jù)進行過濾時通常都是自己寫方法進行判斷
比如驗證郵箱的時候使用正則表達式 $pattern = "/\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/"; if (!preg_match($pattern, $email)) {throw new \Exception(self::ERROR_PARAMETER_EMPTY . '_郵件格式有誤:' . $email); }
filter_input 從腳本外部獲取輸入,并進行過濾。
filter_input_array 從腳本外部獲取多項輸入,并進行過濾。
filter_var 獲取一個變量,并進行過濾。
filter_var_array 獲取多項變量,并進行過濾。
htmlentities 把字符轉(zhuǎn)換為 HTML 實體,(還會把貨幣表示符號歐元英鎊等、版權(quán)符號等轉(zhuǎn)義)
htmlspecialchars 函數(shù)把預(yù)定義的字符轉(zhuǎn)換為 HTML 實體。
預(yù)定義的字符是:
& (和號)成為 &
" (雙引號)成為 "
' (單引號)成為 '
< (小于)成為 <
(大于)成為 >
$input = "<span>我是標題</span>"; echo htmlspecialchars($input) . "\n"; echo htmlentities($input) . "\n"; echo strip_tags($input) . "\n";$input = "-- 'select * from "; echo addslashes($input) . "\n";
比如驗證郵箱的時候使用正則表達式 $pattern = "/\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/"; if (!preg_match($pattern, $email)) {throw new \Exception(self::ERROR_PARAMETER_EMPTY . '_郵件格式有誤:' . $email); }
如果不用正則還有其它跟簡單的方法嗎?
使用filter相關(guān)函數(shù)
filter_has_var(type, variable) 是否存在指定類型的變量。filter_input 從腳本外部獲取輸入,并進行過濾。
filter_input_array 從腳本外部獲取多項輸入,并進行過濾。
filter_var 獲取一個變量,并進行過濾。
filter_var_array 獲取多項變量,并進行過濾。
filter_has_var
判斷$_GET 的結(jié)果是否包含name
if(!filter_has_var(INPUT_GET, "name")) {echo("name 不存在"); } else {echo("name 存在"); }filter_input
看一個驗證郵箱的例子
if (!filter_input(INPUT_GET, 'email', FILTER_VALIDATE_EMAIL)) {echo "E-Mail is not valid"; } else {echo "E-Mail is valid"; }filter_input_array
對整個input源進行過濾
$filters = array ("name" => array("filter"=>FILTER_CALLBACK,"flags"=>FILTER_FORCE_ARRAY,"options"=>"ucwords"),"age" => array("filter"=>FILTER_VALIDATE_INT,"options"=>array("min_range"=>1,"max_range"=>120)),"email"=> FILTER_VALIDATE_EMAIL, ); print_r(filter_input_array(INPUT_POST, $filters));filter_var,filter_var_array
不需要input源,直接對值進行過濾
if(!filter_var("someone@example....com", FILTER_VALIDATE_EMAIL)){echo("E-mail is not valid");} else{echo("E-mail is valid");}input源的范圍
驗證
其它過濾方法
strip_tags 刪除html標簽htmlentities 把字符轉(zhuǎn)換為 HTML 實體,(還會把貨幣表示符號歐元英鎊等、版權(quán)符號等轉(zhuǎn)義)
htmlspecialchars 函數(shù)把預(yù)定義的字符轉(zhuǎn)換為 HTML 實體。
預(yù)定義的字符是:
& (和號)成為 &
" (雙引號)成為 "
' (單引號)成為 '
< (小于)成為 <
(大于)成為 >
*提示:如需把特殊的 HTML 實體轉(zhuǎn)換回字符,請使用 htmlspecialcharsdecode() 函數(shù)。
$input = "<span>我是標題</span>"; echo htmlspecialchars($input) . "\n"; echo htmlentities($input) . "\n"; echo strip_tags($input) . "\n";$input = "-- 'select * from "; echo addslashes($input) . "\n";
總結(jié)
- 上一篇: 股票配债怎么操作
- 下一篇: 动态规划算法php,php算法学习之动态