php json_encode() 字符转义问题
今天和 JAVA
开发对接 API
,发现一个由于 PHP
数组转 json
字符转义问题导致的 bug
。由于我们的接口需要对数据进行加密,做签名验证。生成签名时由于数据类型是数组,需要把数组转成 json
字符串,由于 PHP
的 json_encode()
函数默认会在 /
字符添加 \
转义,在 json_decode
时再去掉。而 JAVA
把数组转 json
默认是不会做处理,导致做签名验证时一直错误,接口无法调用。
原始代码示例:
$data = [
'id' => 10023,
'url' => 'https://baidu.com/'
];
echo json_encode($data);
//结果 {"id":10023,"url":"https:\/\/baidu.com\/"}
查看文档发现 json_encode()
函数有第二个参数 JSON_UNESCAPED_SLASHES
对特殊字符不转义处理。
兼容代码示例:
$data = [
'id' => 10023,
'url' => 'https://baidu.com/'
];
echo json_encode($data,JSON_UNESCAPED_SLASHES);
//结果 {"id":10023,"url":"https://baidu.com/"}
最终测试可以供 JAVA
正常调用,问题得以解决。
您将是第一位评论人!