## 概述
系統提供了`\think\Input`類來完成輸入變量的獲取和安全過濾。
## 變量獲取
### 獲取GET變量
~~~
\think\Input::get('id'); // 獲取某個get變量
\think\Input::get('name'); // 獲取get變量
\think\Input::get(); // 獲取所有的get變量(數組)
~~~
或者使用內置的快捷I方法實現相同的功能:
~~~
I('get.id');
I('get.name');
I('get.');
~~~
### 獲取POST變量
~~~
\think\Input::post('name'); // 獲取某個post變量
\think\Input::post(); // 獲取全部的post變量
~~~
使用快捷方法實現:
~~~
I('post.name');
I('post.');
~~~
### 獲取PUT變量
~~~
\think\Input::put('name'); // 獲取某個put變量
\think\Input::put(); // 獲取全部的put變量
~~~
使用快捷方法實現:
~~~
I('put.name');
I('put.');
~~~
### 獲取PARAM變量
PARAM變量是框架提供的用于自動識別GET、POST或者PUT請求的一種變量獲取方式,例如:
~~~
\think\Input::param('name');
如果當前是get請求,那么等效于
\think\Input::get('name');
如果當前是post請求,則等同于
\think\Input::post('name');
~~~
使用快捷方法實現:
~~~
I('param.name');
I('param.');
或者
I('name');
I('');
~~~
因為I函數默認就采用PARAM變量讀取方式。
### 獲取REQUEST變量
~~~
\think\Input::request('id'); // 獲取某個request變量
\think\Input::request(); // 獲取全部的request變量
~~~
使用快捷方法實現:
~~~
I('request.id');
I('request.');
~~~
### 獲取SERVER變量
~~~
\think\Input::server('PHP_SELF'); // 獲取某個server變量
\think\Input::server(); // 獲取全部的server變量
~~~
使用快捷方法實現:
~~~
I('server.PHP_SELF');
I('server.');
~~~
### 獲取SESSION變量
~~~
\think\Input::session('user_id'); // 獲取某個session變量
\think\Input::session(); // 獲取全部的session變量
~~~
使用快捷方法實現:
~~~
I('session.user_id');
I('session.');
~~~
### 獲取Cookie變量
~~~
\think\Input::cookie('user_id'); // 獲取某個cookie變量
\think\Input::cookie(); // 獲取全部的cookie變量
~~~
使用快捷方法實現:
~~~
I('cookie.user_id');
I('cookie.');
~~~
## 變量過濾
支持對獲取的變量進行過濾,過濾方式包括函數、方法過濾,以及PHP內置的Types of filters,例如:
~~~
\think\Input::get('name','htmlspecialchars'); // 獲取get變量 并用htmlspecialchars函數過濾
\think\Input::param('username','strip_tags'); // 獲取param變量 并用strip_tags函數過濾
\think\Input::post('name','org\Filter::safeHtml'); // 獲取post變量 并用org\Filter類的safeHtml方法過濾
~~~
可以支持傳入多個過濾規則,例如:
~~~
\think\Input::param('username','strip_tags,strtolower'); // 獲取param變量 并依次調用strip_tags、strtolower函數過濾
~~~
Input類還支持PHP內置提供的Filter ID過濾,例如:
~~~
\think\Input::post('email',FILTER_VALIDATE_EMAIL);
~~~
框架對FilterID做了轉換支持,因此也可以使用字符串的方式,例如:
~~~
\think\Input::post('email','email');
~~~
采用字符串方式定義FilterID的時候,系統會自動進行一次filter_id調用轉換成Filter常量。
具體的字符串根據filter_list函數的返回值來定義。
> 需要注意的是,采用Filter ID 進行過濾的話,如果不符合過濾要求的話 會返回false,因此你需要配合默認值來確保最終的值符合你的規范。
例如,
~~~
\think\Input::post('email',FILTER_VALIDATE_EMAIL,'');
~~~
就表示,如果不是規范的email地址的話 返回空字符串。
## 變量修飾符
I函數支持對變量使用修飾符功能,可以更好的過濾變量。
用法如下:?
**I('變量類型.變量名/修飾符');**
或者
**\think\Input::get('變量名/修飾符');**
例如:
~~~
I('get.id/d');
I('post.name/s');
I('post.ids/a');
\think\Input::get('id/d');
~~~
ThinkPHP5.0版本默認的變量修飾符是`/s`,如果需要傳入字符串之外的變量可以使用下面的修飾符,包括:
| 修飾符 | 作用 |
| --- | --- |
| s | 強制轉換為字符串類型 |
| d | 強制轉換為整形類型 |
| b | 強制轉換為布爾類型 |
| a | 強制轉換為數組類型 |
| f | 強制轉換為浮點類型 |
>[danger] 如果你要獲取的數據為數組,請一定注意要加上 `/a` 修飾符才能正確獲取到。