在使用json_encode()函数的时候经常会遇到汉语和斜杠的问题,很多时候都不知道怎么处理,或者处理了下次就忘了,那么这一次就记下来,防止以后忘了。
背景
在整理以前的代码时突然发现中文和斜杠“/"被转义啦
<?php
class Emp {
public $name = "";
public $hobbies = "";
public $birthdate = "";
}
$e = new Emp();
$e->name = "LEO小李子";
$e->hobbies = "打篮球";
$e->birthdate = date('m/d/Y h:i:s a', strtotime("8/5/1974 12:20:03"));
var_dump(json_encode($e));
可以看到汉字和斜杠都变啦
一、不转义斜杠“/”
在PHP中让json_encode()函数不转义斜杠“/”的方法有两种:
第一就是正则的方法:
str_replace("\\/", "/", json_encode($e));
第二就是使用 JSON_UNESCAPED_SLASHES
var_dump(json_encode($e,JSON_UNESCAPED_SLASHES));//必须PHP5.4+
可以看到生日部分的斜杠“\”已经没啦
二、不转义汉字
在PHP中汉字被转义成了以“\u”开头的一串字符,可以使用“JSON_UNESCAPED_UNICODE”防止转义
var_dump(json_encode($e,JSON_UNESCAPED_UNICODE));//必须PHP5.4+
三、同时转义汉字和斜杠“/"
虽然能单独转义了,但能不能同时转义呢,我想到的是,把他们同时放进去
var_dump(json_encode($e,JSON_UNESCAPED_SLASHES,JSON_UNESCAPED_UNICODE));
可惜不行。
正确的方式是
str_replace("\\/", "/", json_encode($e,JSON_UNESCAPED_UNICODE));
或者
var_dump(json_encode($e,320));
终于OK啦!
另外
json_encode($value,$options)
其中有2个比较常用到的参数
JSON_UNESCAPED_UNICODE (中文不转为unicode ,对应的数字 256)
JSON_UNESCAPED_SLASHES (不转义斜杠,对应的数字 64)
通常json_encode只能传入一个常量,如果同时使用2个常量怎么办?
JSON_UNESCAPED_UNICODE + JSON_UNESCAPED_SLASHES = 320
使用方法:json_encode($arr,320);即可完成同时使用2个常量
扫描二维码,在手机上阅读!