ThinkPHP中 I 函數的一個值得注意的使用細節

提要: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也是空
相關文章
相關標籤/搜索