PHP內建函數研究系列第四期,採用PHP函數parse_str實現查詢字串解析到變數中,主要討論parse_str()函數的作用和用法。
parse_str()函數可實現把字串解析到變數中,這意味著實現了字串與變數之間的一種轉換機制,在與用戶端資料傳遞的過程中,資料是通過字串的形式傳遞,如GET請求,然後在伺服器端通過$_GET/$_POST等全域變數實現字串與變數的轉換,如:http://www.liuhui.info/?index.php?var1=1&var2=2,請求後服務端可使用$_GET['var1']的方式擷取var1=1&var2=2這一段字串轉換成變數。parse_str()函數可實現用樣的功能,使用parse_str()函數解析$_SERVER['QUERY_STRING']的值,就可以直接實現字串與變數的轉換,如$var1。
一,函數原型
| 代碼如下 |
複製代碼 |
| void parse_str ( string str [, array &arr] ) |
二,版本相容
PHP 3, PHP 4, PHP 5
三,函數基礎用法與執行個體
1,解析字串為變數
| 代碼如下 |
複製代碼 |
parse_str("var1=liuhui&var2=parse_str"); echo $var1.$var2; ?> |
2,解析字串並將變數儲存到數組中
| 代碼如下 |
複製代碼 |
parse_str("var1=liuhui&var2=parse_str",$array); print_r($array); ?> 輸出:Array ( [var1] => liuhui [var2] => parse_str )
|
說明:這種將變數儲存到數組中在PHP 4.0.3 才增加
3,解析的字串有空格
| 代碼如下 |
複製代碼 |
parse_str("v ar1=liuhui&var 2=parse_str",$array); print_r($array); ?> 輸出:Array ( [v_ar1] => liuhui [var_2] => parse_str ) |
說明:直接將空格轉換為底線_
四,注意事項
1,如果未設定 array 參數,由該函數設定的變數將覆蓋已由同名變數。
2,php.ini 中的 magic_quotes_gpc 設定影響該函數的輸出。如果已啟用,那麼在 parse_str() 解析之前,變數會被 addslashes() 轉換。
3,parse_str() 函數在處理參數時存在漏洞,攻擊者可以利用這個漏洞啟用register_globals,從而進一步利用其他PHP指令碼中的漏洞。如果僅以一個參數調用 parse_str()的話,該函數會認為該參數是通過URL傳送的請求字串那樣解析所提供的字串,但外部攻擊者可以在調用 parse_str()期間發送很多請求變數來觸發memory_limit請求終止。如果在調用parse_str()期間執行了請求關閉的話,則在相 關webserver進程的其餘生命週期期間register_globals標籤會一直開啟。
http://www.bkjia.com/PHPjc/445318.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/445318.htmlTechArticlePHP內建函數研究系列第四期,採用PHP函數parse_str實現查詢字串解析到變數中,主要討論parse_str()函數的作用和用法。 parse_str()函數可實現把...