PHP在使用json_encode()时同时不转义汉字和斜杠

LEO-屹铭 2020-06-08 PM 1869℃ 0条

在使用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));

json-1.png
可以看到汉字和斜杠都变啦

一、不转义斜杠“/”
在PHP中让json_encode()函数不转义斜杠“/”的方法有两种:
第一就是正则的方法:

str_replace("\\/", "/", json_encode($e));

第二就是使用 JSON_UNESCAPED_SLASHES

var_dump(json_encode($e,JSON_UNESCAPED_SLASHES));//必须PHP5.4+

json-2.png
可以看到生日部分的斜杠“\”已经没啦

二、不转义汉字
在PHP中汉字被转义成了以“\u”开头的一串字符,可以使用“JSON_UNESCAPED_UNICODE”防止转义

var_dump(json_encode($e,JSON_UNESCAPED_UNICODE));//必须PHP5.4+

json-3.png

三、同时转义汉字和斜杠“/"
虽然能单独转义了,但能不能同时转义呢,我想到的是,把他们同时放进去

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));

json-4.png
终于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个常量


扫描二维码,在手机上阅读!
标签: PHP

非特殊说明,本博所有文章均为博主原创。

评论啦~


选择表情