thinkphp3.x中變數的擷取和過濾方法詳解,thinkphp3.x詳解_PHP教程

來源:互聯網
上載者:User

thinkphp3.x中變數的擷取和過濾方法詳解,thinkphp3.x詳解


本文執行個體講述了thinkphp3.x中變數的擷取和過濾方法。分享給大家供大家參考,具體如下:

這裡我們來學習如何在ThinkPHP中使用變數和對變數進行過濾。

在Web開發過程中,我們經常需要擷取系統變數或者使用者提交的資料,這些變數資料錯綜複雜,而且一不小心就容易引起安全隱患,但是如果利用好ThinkPHP提供的變數擷取功能,就可以輕鬆的擷取和駕馭變數了。

一、擷取變數

1.首先,我們來談下如何擷取變數。

第一種方式:傳統擷取方式,你仍然可以在開發過程中使用傳統方式擷取各種系統變數,例如:

$id = $_GET['id'];//擷取get變數$name = $_POST['name'];//擷取post變數$value = $_SESSION['var'];//擷取session變數$name = $_COOKIE['name'];//擷取cookie變數$file = $_SERVER['PHP_SELF'];//擷取server變數

不建議直接使用傳統方式擷取,因為沒有統一的安全處理機制,後期如果調整的話,改起來會比較麻煩。

第二種方式:使用Action類提供的動態方法

系統的Action類提供了對系統變數的增強擷取方法,包括對GET、POST、PUT、REQUEST、SESSION、COOKIE、SERVER和GLOBALS參數,除了擷取變數值外,還提供變數過濾和預設值支援,用法很簡單,只需要在Action中調用下面方法:

$id = $this->_get('id');//擷取get變數$name = $this->_post('name');//擷取post變數$value = $this->_session('var');//擷取session變數$name = $this->_cookie('name');//擷取cookie變數$file = $this->_server('PHP_SELF');//擷取server變數

調用格式為:

$this->方法名("變數名",["過濾方法"],["預設值"])

支援的方法名:

_get 擷取GET參數
_post 擷取POST參數
_param 自動判斷請求類型擷取GET、POST或者PUT參數
_request 擷取REQUEST參數
_put 擷取PUT參數
_session 擷取$_SESSION參數
_cookie 擷取$_COOKIE參數
_server 擷取$_SERVER參數
_globals 擷取$GLOBALS參數

變數名:(必須)是要擷取的系統變數的名稱

過濾方法:(可選)可以用任何的內建函數或者自訂函數名,如果沒有指定的話,採用預設的htmlspecialchars函數進行安全過濾(由DEFAULT_FILTER 參數配置),參數就是前面方法名擷取到的值,

也就是說如果調用:

$this->_get("name");

最終調用的結果就是 htmlspecialchars($_GET["name"]),如果要改變過濾方法,可以使用:

$this->_get("name","strip_tags");

預設值:(可選)是要擷取的參數變數不存在的情況下設定的預設值,例如:

$this->_get("id","strip_tags",0);

如果$_GET["id"] 不存在的話,會返回0。

如果沒有設定任何預設值的話,系統預設返回NULL。

其他方法的用法類似。

看起來好像差別不大,但是有一個明顯的優勢,就是如果我需要增加或者改變對這些變數做統一的過濾,一般不需要修改變數擷取的代碼,只是在項目設定檔中增加一個配置參數即可,例如:

'DEFAULT_FILTER'=>'strip_tags'

對所有的採用動態方式擷取的變數使用strip_tags方法進行統一過濾,也可以支援多個過濾方法,例如:

'DEFAULT_FILTER'=>'strip_tags,htmlspecialchars'

表示先進行strip_tags過濾,然後再進行htmlspecialchars過濾。

如果你在擷取某個變數的時候 需要自訂過濾方法,則可以改成:

$name = $this->_post('content','trim,strip_tags');// 擷取post變數並過濾

如果你在項目配置中設定了統一的變數過濾方法,但是希望對某些變數不進行過濾,則可以用:

$name = $this->_post('id','',0);

如果你的參數可能會來自於多個提交方式,那麼可以使用_param方法來更方便的擷取,例如:

$this->_param('id');

當前為get方式提交的時候,就等效於

$this->_get('id');

當前為post方式提交的時候,就等效於

$this->_post('id');

如果為put方式提交的話,就等效於

$this->_put('id');

其優點自然很明顯,同一個方法可以接受不同提交類型的變數,不用手動做太多的判斷再來擷取不同的參數了。

二、擷取URL參數

在某些情況下面,我們還有一種擷取URL參數的特殊需求,一般來說,擷取URL參數是採用get變數的方式就夠用了,但是對於我們定製過的URL,或者採用了路由的情況下面,URL的參數可能會沒有規律,這個時候,我們可以採用另外一種方式來擷取。

例如,當前的URL地址是:

http://localhost/index.php/news/hello_world/thinkphp

我們要擷取其中的參數,可以用:

$this->_param(0); // 擷取news$this->_param(1); // 擷取hello_world$this->_param(2); // 擷取thinkphp

不過_param(數字) 方式的變數擷取,僅對PATHINFO模式URL地址有效

三、變數過濾

前面我們已經瞭解了如何使用Action類提供的方法來進行變數擷取和過濾了,但是在沒有調用這些動態方法的前提下,我們怎麼來進行資料過濾呢?

ThinkPHP還提供了兩種方式來進行資料過濾操作:

第一:配置全域的變數過濾

這種情況是針對一些會在多使用的情況,可以通過配置全域過濾 簡化操作,例如在項目設定檔中添加參數:

'VAR_FILTERS'=>'strip_tags'

則會對全域的get和post變數進行過濾,其他類型的系統變數需要自行過濾。

第二:在寫入資料庫之前進行變數過濾

如果你的變數資料是要寫入到資料庫的話,可以在資料寫入資料庫之前調用filter方法對資料進行安全過濾,例如:

$this->data($data)->filter('strip_tags')->add();

在執行add方法之前,會對$data資料進行strip_tags過濾處理。但是,這種方式下面,filter方法不支援多個過濾方法。

四、總結

使用ThinkPHP,我們可以輕鬆地對系統變數的擷取和過濾,你的開發功力明顯提升了不少。加油,後面還會講解如何使用路由。

PS:這裡推薦幾款本站的格式化美化工具,相信大家在以後的開發中能夠用得上:

php代碼線上格式化美化工具:
http://tools.jb51.net/code/phpformat

JavaScript代碼美化/壓縮/格式化/加密工具:
http://tools.jb51.net/code/jscompress

線上XML格式化/壓縮公用程式:
http://tools.jb51.net/code/xmlformat

JSON代碼格式化美化工具:
http://tools.jb51.net/code/json

線上XML/JSON互相轉換工具:
http://tools.jb51.net/code/xmljson

json代碼線上格式化/美化/壓縮/編輯/轉換工具:
http://tools.jb51.net/code/jsoncodeformat

sql代碼線上格式化美化工具:
http://tools.jb51.net/code/sqlcodeformat

更多關於thinkPHP相關內容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《ThinkPHP常用方法總結》、《PHP中cookie用法總結》、《smarty模板入門基礎教程》及《PHP模板技術總結》。

希望本文所述對大家基於ThinkPHP架構的PHP程式設計有所協助。

http://www.bkjia.com/PHPjc/1133132.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1133132.htmlTechArticlethinkphp3.x中變數的擷取和過濾方法詳解,thinkphp3.x詳解 本文執行個體講述了thinkphp3.x中變數的擷取和過濾方法。分享給大家供大家參考,具體如下...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.