PHP中 json_encode() 函数避免中文Unicode编码转化和斜杠转义问题
在php中可以使用 json_encode()
方法快速将数组转化成json字符串.
偶然在一个aes加密方法后,发现与预期不符。经过排查发现 json_encode()
方法将中文进行了 Unicode
转化。
预期的 {"name":"张三"}
变成了 {"name":"\u5f20\u4e09"}
,结果导致了加密方法后不一致的问题。
经过查看手册发现,json_encode()
函数提供了可选的参数。其中,JSON_UNESCAPED_UNICODE
用于确保中文字符不被转义为 Unicode
编码。
<?php
echo json_encode(['name' => '张三'], JSON_UNESCAPED_UNICODE);
经过添加一个参数控制了中文Unicode转化的问题,但是在实际项目中经过加密方法后仍然导致不一样,经排查,数组中包含了url地址,json_encode()
会将 /
转义为 \/
。
{"name":"张三","url":"http://baidu.com"}
变成了 {"name":"张三","url":"http:\/\/baidu.com"}
行,我继续翻手册,找到 JSON_UNESCAPED_SLASHES
这个参数可以不转义斜杠。在我们既不想中文转化,也不想转义斜杠的情况下,可以使用 加法
将2个常量相加。
<?php
echo json_encode(['name' => '张三', 'url':'http://baidu.com'], JSON_UNESCAPED_UNICODE + JSON_UNESCAPED_SLASHES);
至此,问题圆满解决。