今天做图片上传的时候,后台需要给前台返回一个json格式的数据,我最初是直接用的:
<?php
$jsonstr = json_encode($arry);
结果如下:
'{"initialPreview":"1592654783258.jpg","initialPreviewConfig":[{"key":"100","caption":"\u6211\u7231\u4f60","size":"600","downloadUrl":"http:\/\/127.0.0.1\/bootstrap-fileinput\/index.php","url":"http:\/\/127.0.0.1\/bootstrap-fileinput\/index.php"}],"initialPreviewAsData":"true","append":"true"}'
从这里可以清楚得到如下的结论:
"caption":"\u6211\u7231\u4f60" ---- 这里本应该是中文的,结果中文被unicode编码了。
http:\/\/ ---- 这里本应该是http,结果所有的斜杠都被转义了。
现在前台的要求是:
为了方便处理数据,接受的数据中文必须是不被unicode编码,斜杠也不需要被转义。最终前台要的json数据格式如下:
'{"initialPreview":"1592655461258.jpg","initialPreviewConfig":[{"key":"100","caption":"我爱你","size":"600","downloadUrl":"http://127.0.0.1/bootstrap-fileinput/index.php","url":"http://127.0.0.1/bootstrap-fileinput/index.php"}],"initialPreviewAsData":"true","append":"true"}'
解决方法
先给大家说一点关于php中json_encode的知识点,相信,大家都知道:
php中json_encode有几个常量,例如:
JSON_UNESCAPED_UNICODE //中文不转为unicode
JSON_UNESCAPED_SLASHES //不转义反斜杠
......
这里有两种方法,具体都给大家来简单说说,以我这里为示例,让两个同时生效的方法如下:
第一种方法
在这俩参数中间加个“|”,代码如下:
<?php
$jsonstr= json_encode($array,JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE);
第二种方法
由于 JSON_UNESCAPED_UNICODE 和 JSON_UNESCAPED_SLASHES 都是常量;
JSON_UNESCAPED_UNICODE = 256
JSON_UNESCAPED_SLASHES = 64
JSON_UNESCAPED_UNICODE + JSON_UNESCAPED_SLASHES = 320
两个同时生效代码可以这样用,如下:
<?php
$jsonstr= json_encode($array,320);
总结:
虽然我这里主要说的是让json_encode中文unicode编码和斜杠转义同时生效,如果你想单一的生效,操作原理也是一样的,替换或删除多余的就可以了,也是非常的简单。