提要:javascript
ThinkPHP的 I 函數會將傳入的對象進行過濾,如不顯示聲明過濾方法,它會默認調用ThinkPHP的 「htmlspecialchars"
方法進行過濾。 php
場景:html
1. 在html頁面中使用js的window.location.href()方法進行get傳參,使用JSON.stringify()將須要傳遞的數組轉化成json字串:java
JavaScript:json
var data ={ start: $("#start-picker").val(), arrive: $("#arrive-picker").val(), startDate: $("#startDate").val(), businessAcc: businessAcc }; $.hideIndicator(); window.location.href=config['hd']+"Home/Index/result?data=" +encodeURIComponent(JSON.stringify(data));
2. result操做中的代碼:數組
PHP:ide
$data =I("get.data"); echo $data; var_dump($data); $d =$_GET["data"]; echo $d; var_dump($d);
輸出結果以下:函數
3. 有上面的結果能夠看出:spa
3.1 直接echo 是看不出什麼區別的;code
3.2 用var_dump分別輸出用I函數處理過的和直接$_GET[]的數據就能夠看出緣由了。
3.3 緣由就是I函數的過濾方法 「htmlspecialchars"將json字串中的雙引號轉換成了html實體符號。
4. 後果:
在PHP中使用json_decode()函數解碼json字串後,沒有任何結果輸出。
PHP:
$data =json_decode($data); echo $data->start; //輸出結果爲空,用var_dump也是空