ThinkPHP I 方法(Input 縮寫)是統一、安全獲取輸入變量的核心入口,整合 $_GET/POST/REQUEST/SESSION/COOKIE/SERVER 等超全局變量,內建過濾機制,支援默認值、類型驗證、遞歸過濾。
I('變量類型.變量名', ['默認值'], ['過濾方法'])
| 類型 | 來源 | 說明 |
|---|---|---|
| get | $_GET | GET 參數 |
| post | $_POST | POST 參數 |
| param | 自動判斷 | GET/POST/PUT 智能獲取 |
| request | $_REQUEST | 合併 GET/POST/COOKIE |
| put | PUT 輸入流 | RESTful API |
| session | $_SESSION | Session 變量 |
| cookie | $_COOKIE | Cookie 變量 |
| server | $_SERVER | 服務器變量 |
| globals | $GLOBALS | 全局變量 |
類型不區分大小寫,變量名嚴格區分大小寫。
echo I('get.id'); // $_GET['id']
echo I('get.name'); // $_GET['name']
echo I('post.email'); // $_POST['email']
echo I('session.user_id'); // $_SESSION['user_id']
echo I('cookie.'); // 整個 $_COOKIE 陣列
echo I('server.REQUEST_METHOD'); // $_SERVER['REQUEST_METHOD']
echo I('get.id', 0); // 不存在返回 0
echo I('get.name', ''); // 不存在返回空字符串
echo I('get.name', '', 'htmlspecialchars'); // 過濾後返回
echo I('post.email', '', 'strip_tags'); // 去除標籤
// 配置文件
'DEFAULT_FILTER' => 'htmlspecialchars' // 默認
'DEFAULT_FILTER' => 'strip_tags,htmlspecialchars' // 多重過濾
// 效果
I('get.name'); // 等同 htmlspecialchars($_GET['name'])
I('get.name'); // 等同 htmlspecialchars(strip_tags($_GET['name']))
I('get.name', '', NULL); // 不進行任何過濾
// 函數名:自動 array_map 處理陣列
I('post.ids', [], 'intval'); // 陣列每個元素 intval
// filter_var 驗證:返回 false 則用默認值
I('post.email', '', FILTER_VALIDATE_EMAIL);
I('post.url', '', FILTER_VALIDATE_URL);
// 字符標識簡寫(需 filter_list 支援)
I('post.email', '', 'email');
I('post.url', '', 'url');
I('post.age', '', 'int');
int, boolean, float, validate_regexp, validate_url, validate_email, validate_ip, string, stripped, encoded, special_chars, unsafe_raw, email, url, number_int, number_float, magic_quotes, callback
I('param.id'); // GET 取 $_GET['id'],POST 取 $_POST['id']
# URL: /News/2013/06/01
echo I('param.1'); // 2013
echo I('param.2'); // 06
echo I('param.3'); // 01
I('id'); // 等同 I('param.id')
I('name'); // 等同 I('param.name')
// 配置
'VAR_FILTERS' => 'filter_default,filter_exp'
// filter_default 需引用參數
function filter_default(&$value) {
$value = htmlspecialchars($value);
}
// filter_exp:防止 EXP 注入攻擊(框架內置)
$_GET/$_POSTDEFAULT_FILTER => 'htmlspecialchars' 作為基線防護I('post.email', '', 'email')