正如你所見到的一樣,i方法是thinkphp眾多單字母函式中的新成員,其命名來自於英文input(輸入),主要用於更加方便和安全的獲取系統輸入變數,可以用於任何地方,用法格式如下:
i('變數型別.變數名',['預設值'],['過濾方法'])
變數型別是指請求方式或者輸入型別,包括:
變數型別
含義get
獲取get引數
post
獲取post引數
param
自動判斷請求型別獲取get、post或者put引數
request
獲取request 引數
put獲取put 引數
session
獲取 $_session 引數
cookie
獲取 $_cookie 引數
server
獲取 $_server 引數
globals
獲取 $globals引數
注意:變數型別不區分大小寫。
變數名則嚴格區分大小寫。
預設值和過濾方法均屬於可選引數。
用法
echo i('get.id',0); //如果不存在$_get['id'] 則返回0
echo i('get.name',''); //
如果不存在$_get['name'] 則返回空字串
支援預設
echo i('get.id',0); //如果不存在$_get['id'] 則返回0
echo i('get.name',''); //
如果不存在$_get['name'] 則返回空字串
支援方法過濾
echo i('get.name','','htmlspecialchars'); //採用htmlspecialchars方法對$_get['name'] 進行過濾,如果不存在則返回空字串
支援直接獲取整個變數型別
i('get.'); //獲取整個$_get 陣列
用同樣的方式,我們可以獲取post或者其他輸入型別的變數,例如:
i('post.name','','htmlspecialchars'); //採用htmlspecialchars方法對$_post['name'] 進行過濾,如果不存在則返回空字串
i('session.user_id',0); //
獲取$_session['user_id'] 如果不存在則預設為0
i('cookie.'); //
獲取整個 $_cookie 陣列
i('server.request_method'); //
獲取 $_server['request_method']
param變數型別是框架特有的支援自動判斷當前請求型別的變數獲取方式,例如:
echo i('param.id');
如果當前請求型別是get,那麼等效於 $_get['id'],如果當前請求型別是post或者put,那麼相當於獲取 $_post['id'] 或者 put引數id。
並且param型別變數還可以用數字索引的方式獲取url引數(必須是pathinfo模式引數有效,無論是get還是post方式都有效),例如:
當前訪問url位址是
輸出2013
echo i('param.2'); //
輸出06
echo i('param.3'); //
輸出01
i('id'); //等同於 i('param.id')
i('name'); //
等同於 i('param.name')
使用i方法的時候 變數其實經過了兩道過濾,首先是全域性的過濾,全域性過濾是通過配置var_filters引數,這裡一定要注意,3.1版本之後,var_filters引數的過濾機制已經更改為採用array_walk_recursive方法遞迴過濾了,主要對過濾方法的要求是必須引用返回,所以這裡設定htmlspecialchars是無效的,你可以自定義乙個方法,例如:
function
filter_default
(&$value
)複製**
然後配置:
'var_filters'
=>
'filter_default'
複製**
如果需要進行多次過濾,可以用:
'var_filters'
=>
'filter_default,filter_exp'
複製**
filter_exp方法是框架內建的安全過濾方法,用於防止利用模型的exp功能進行注入攻擊。
因為var_filters引數設定的是全域性過濾機制,而且採用的是遞迴過濾,對效率有所影響,所以,我們更建議直接對獲取變數過濾的方式,除了在i方法的第三個引數設定過濾方法外,還可以採用配置default_filter引數的方式設定過濾,事實上,該引數的預設設定是:
'default_filter'
=>
'htmlspecialchars'
複製**
也就說,i方法的所有獲取變數都會進行htmlspecialchars過濾,那麼:i(
'get.name'
);// 等同於 htmlspecialchars($_get['name'])
複製**
同樣,該引數也可以支援多個過濾,例如:
'default_filter'
=>
'strip_tags,htmlspecialchars'
複製**i(
'get.name'
);// 等同於 htmlspecialchars(strip_tags($_get['name']))
複製**
如果我們在使用i方法的時候 指定了過濾方法,那麼就會忽略default_filter的設定,例如:
echo i
('get.name',''
,'strip_tags'
);// 等同於 strip_tags($_get['name'])
複製**
i方法的第三個引數如果傳入函式名,則表示呼叫該函式對變數進行過濾並返回(在變數是陣列的情況下自動使用array_map進行過濾處理),否則會呼叫php內建的filter_var方法進行過濾處理,例如:i(
'post.email',''
,filter_validate_email
);複製**
表示 會對$_post['email'] 進行 格式驗證,如果不符合要求的話,返回空字串。
官方手冊的filter_var用法
。)或者可以用下面的字元標識方式:i(
'post.email',''
,'email'
);複製**
可以支援的過濾名稱必須是filter_list方法中的有效值(不同的伺服器環境可能有所不同),可能支援的包括:
intboolean
float
validate_regexp
validate_url
validate_email
validate_ip
string
stripped
encoded
special_chars
unsafe_raw
urlnumber_int
number_float
magic_quotes
callback
複製**
在有些特殊的情況下,我們不希望進行任何過濾,即使default_filter已經有所設定,可以使用:i(
'get.name',''
,null
);複製**
一旦過濾引數設定為null,即表示不再進行任何的過濾。
ThinkPHP函式詳解 I方法
其命名來自於英文input 輸入 主要用於更加方便和安全的獲取系統輸入變數,可以用於任何地方,用法格式如下 i 變數型別.變數名 預設值 過濾方法 變數型別是指請求方式或者輸入型別,包括 變數型別 含義get 獲取get引數 post 獲取post引數 param 自動判斷請求型別獲取get pos...
ThinkPHP函式詳解 I方法
正如你所見到的一樣,i方法是thinkphp眾多單字母函式中的新成員,其命名來自於英文input 輸入 主要用於更加方便和安全的獲取系統輸入變數,可以用於任何地方,用法格式如下 i 變數型別.變數名 預設值 過濾方法 變數型別是指請求方式或者輸入型別,包括 變數型別 含義get 獲取get引數 po...
ThinkPHP函式詳解 I方法
thinkphp的i方法是3.1.3版本新增的,如果你是之前的3.版本的話,可以直接參考使用3.1快速入門教程系列的變數部分。該用法將會在將來的版本中廢棄,事實上,如果你仍然還在使用該方式會有警告錯誤提示 正如你所見到的一樣,i方法是thinkphp眾多單字母函式中的新成員,其命名來自於英文inpu...