php json_encode() 字符转义问题

今天和 JAVA 开发对接 API ,发现一个由于 PHP 数组转 json 字符转义问题导致的 bug。由于我们的接口需要对数据进行加密,做签名验证。生成签名时由于数据类型是数组,需要把数组转成 json 字符串,由于 PHPjson_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 正常调用,问题得以解决。

打赏作者

您将是第一位评论人!

提醒
avatar