think php i函数,ThinkPHP中 I 函数的一个值得注意的使用细节

提要:

ThinkPHP的 I 函数会将传入的对象进行过滤,如不显示声明过滤方法,它会默认调用ThinkPHP的 “htmlspecialchars"方法进行过滤。

场景:

1. 在html页面中使用js的window.location.href()方法进行get传参,使用JSON.stringify()将需要传递的数组转化成json字串:

JavaScript:

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:

$data =I("get.data");

echo $data;

var_dump($data);

$d =$_GET["data"];

echo $d;

var_dump($d);

输出结果如下:

4cf07c9d14036f2ddc84bfb8f7f1dbfe.png

3. 有上面的结果可以看出:

3.1 直接echo 是看不出什么区别的;

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也是空

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值