ThinkPHP的I()方法接收json数据问题

第一次接触到前后端分离开发,需要在后端接收前端ajax提交的json数据,开发基于ThinkPHP3.2.3框架。于是一开始习惯性的直接用I()方法接收到前端发送的json数据,然后用json_decode()解析发现结果为空!但是打印出还未解析的值却打印得出来。

后来在解决过程中发现原因是ThinkPHP的I()方法默认使用的是htmlspecialchars()方法过滤,json字符串中的双引号被转换成了html实体("),原来的json数据已经不再是json格式了。所以导致用json_decode()解析不出来数据,但是直接打印却可以打印,因为浏览器会将(")解析为”而json_decode()不会。

代码,输出结果如下:

后面查清楚原因之后,我找了字符串的其他解析方法,后面发现只要把I()方法的第二个参数,也就是设置过滤字符串方法改为strip_tags(I($str, '', 'strip_tags')),strip_tags函数使用来去除HTML标签的,就可以解析。

代码,输出结果如下:

不过还有一个方法是直接用$_POST['']接收,也可以解析。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,618评论 19 139
  • 《ilua》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 1...
    叶染柒丶阅读 13,794评论 0 11
  • 两本不错的书: 《Python参考手册》:对Python各个标准模块,特性介绍的比较详细。 《Python核心编程...
    静熙老师哈哈哈阅读 8,625评论 0 80
  • 首先这是一篇广告贴,但是这是一篇没有收费我自愿写下的广告贴,虽然无数人告诉我什么生意都能做,赔本生意不能做,...
    shaocoffee阅读 3,385评论 9 0
  • HTTP 四种方式:GET,POST(增加),PUT(修改),DELETE; 提交方式:urlEncode,for...
    swagon阅读 1,144评论 0 1