最近发现将多链接或多文件地址使用 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)
以上就是这篇文章的全部内容了,希望对大家有所帮助
发表评论 取消回复