最近发现将多链接或多文件地址使用 json_encode 保存时候,在数据库中却显示了转义字符,但是我并不需要这转义的,看起来不清晰而且占用存储空间。后来发现,在默认的情况之下,使用 json_encode 把数组转换 json 字符串格式时,PHP会自动的将数据中含有斜杠的字符串进行转义。但是往往这并不是我们想要的。另外,json_encode 默认情况下会把中文转为 unicode 字符编码的形式,那么最后一个问题:我们要怎么使用 json_encode 同时实现斜杠字符不进行转义 和 中文不转为 unicode 的操作尼?


下面我们先来看如何使用 json_encode 不自动转义斜杠。

对于如下数组 $arr,现有两种办法解决:

$arr = [
    'http://www.dublog.cn/',
    'http://www.dublog.cn/',
    'http://www.dublog.cn/',
    'http://www.dublog.cn/',
    'http://www.dublog.cn/',
];


其一,正则替换:

$str = str_replace("\\/", "/", json_encode($arr));
var_dump($str);

运行结果如下:


其二,若 php 版本是 5.4 及以上的话:

var_dump(json_encode($arr, JSON_UNESCAPED_SLASHES));

运行结果如下:


下面我们再看PHP中的 json_encode 函数中,第二个参数比较常用到的常量

JSON_UNESCAPED_UNICODE(中文不转为unicode,对应的值256)
JSON_UNESCAPED_SLASHES (不转义反斜杠,对应的值64)

json_encode 第二个参数只能传入一个常量,那现在想要同时使用上面的个常量该怎么办尼?

使用下面的方法即可完成同时使用2个常量:

 json_encode($arr, 320);
320 值的计算方法如下:
JSON_UNESCAPED_UNICODE + JSON_UNESCAPED_SLASHES = 320
json_encode($value, JSON_UNESCAPED_UNICODE + JSON_UNESCAPED_SLASHES)


以上就是这篇文章的全部内容了,希望对大家有所帮助


点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部

忘忧竹林

竹林仙境,岁月无痕;

乐而忘忧,心底无尘。