提要: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也是空