在PHP中使用json是很简单的事情,直接使用json_encode,json_decode函数处理就好
绝大部分情况下直接使用是没有任何问题的,今天就分享下json在PHP中一些有意思的操作
中文不转义
使用json_encode的数据中含有中文时,如果什么参数都不传,生成的json字符串中文会变成UNICODE编码,直接看json字符串根本看出是什么中文,这个时候可以使用JSON_UNESCAPED_UNICODE
参数处理
json_encode($data, JSON_UNESCAPED_UNICODE);
斜杠不转义
默认情况下,json_encode会转义斜杠(反斜杠 \)字符为/,同样可以使用JSON_UNESCAPED_SLASHES
参数处理,就不会转义反斜杠
json_encode($data, JSON_UNESCAPED_SLASHES);
如果想要同时设置中文和斜杠都不转义,当然也是可以的
json_encode($data, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
遇到的哪些骚操作
上面只是正常的使用,看一下都会,难的是怎么融汇贯通,下面分享下我在实际项目中的使用
项目需要和其他开发团队进行接口对接,我们使用的是PHP开发,另外一个团队使用的是Java,异构系统间的接口校验使用加码算发生成sign校验,当前这个校验在前期是要先行的,当时也是测试通过的。
但是在发布到测试线的时候就出现了接口鉴权不通过的问题,鉴权代码调试通过后就没有发生更改,这就很奇怪,而且是两个开发团队,都是自己那边没有问题,只能慢慢排查了
接口的加密是把body的所有参数也进行算法加密的,通过Java端的转包发现我们这边没有保持中文和反斜杠不转义,使用上面的两个参数json数据就可以了,项目初期鉴权时使用的简单的英文字符传递的,所以能通过。
扩展
不仅是json_encode
函数可以使用这两个参数,同样json_decode
函数也是可以使用这些参数的