本篇文章为大家展示了在PHP无法使用json_encode函数对中文进行转义如何解决,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
json_encode函数对于gbk中的中文字符是不会转换的或直接转换成空格了,本文就来给各位整理一个关于json不转义中文问题处理技巧,相信对大家有所帮助。
如果你调用PHP自带的json_encode()函数,碰到中文时,中文会被转义掉。例如:
代码如下:
回声json_encode(数组(& # 39;你好& # 39;));
//输出:(“\ u4f60 \ u597d")
这非常恼人,像是一堆乱码,JSON标准从来没有说要把非ASCII字符转义,标准说的是“任何UNICODE字符”。
如何禁用掉这种转义呢?答案是,PHP自带的json_encode()不能禁用这个特性(在5.4.0版本之前,之后的版本你可以加JSON_UNESCAPED_UNICODE选项),你只能换一个新的JSON库。为了简单,我简单写了几十行代码,实现一个json_encode ()。
代码如下:
类Util
{
,,,静态函数json_encode(输入){
,,,,,,,//从PHP 5.4.0起,增加了这个选项。
,,,,,,,如果(定义(& # 39;JSON_UNESCAPED_UNICODE& # 39;)) {
,,,,,,,,,,,返回json_encode(输入美元,JSON_UNESCAPED_UNICODE);
,,,,,,,}
,,,,,,,如果(is_string(输入)美元){
,,,,,,,,,,,文本输入=$美元;
,,,,,,,,,,,$文本=str_replace(& # 39; \ \ & # 39;, & # 39; \ \ \ \ & # 39;,文本)美元;
,,,,,,,,,,,文本美元=str_replace (
,,,,,,,,,,,,,,,阵列(“\ r",“\ n",“\ t",“\““),
,,,,,,,,,,,,,,,阵列(& # 39;\ " # 39;& # 39;\ n # 39;, & # 39; \ t # 39;, & # 39; \ \“& # 39;),
,,,,,,,,,,,,,,,文本)美元;
,,,,,,,,,,,返回& # 39;“& # 39;。美元的文本。& # 39;“& # 39;
,,,,,,,}else if (is_array(输入)美元| | is_object(输入)美元){
,,,,,,,,,,,$ arr=数组();
,,,,,,,,,,,(is_obj=is_object美元输入)| |(中的(输入)美元!==范围(0,数(输入)美元- 1));
,,,,,,,,,,,foreach(输入k=美元和gt;美元v) {
,,,,,,,,,,,,,,,如果(is_obj美元){
,,,,,,,,,,,,,,,,,,,美元arr []=self:: json_encode ($ k)。& # 39;:& # 39;。自我::json_encode (v)美元;
,,,,,,,,,,,,,,,其他}{
,,,,,,,,,,,,,,,,,,,美元arr []=self:: json_encode (v)美元;
,,,,,,,,,,,,,,,}
,,,,,,,,,,,}
,,,,,,,,,,,如果(is_obj美元){
,,,,,,,,,,,,,,,返回& # 39;{& # 39;。加入(& # 39;& # 39;arr美元)。& # 39;}& # 39;;
,,,,,,,,,,,其他}{
,,,,,,,,,,,,,,,返回& # 39;[& # 39;。加入(& # 39;& # 39;arr美元)。& # 39;]& # 39;;
,,,,,,,,,,,}
,,,,,,,其他}{
,,,,,,,,,,,返回输入美元。& # 39;& # 39;;
,,,,,,,}
,,,}
}
考虑不到的地方,例如判断关联数组(is_obj)的地方,遇到问题再说。你要是不喜欢类,那就自己转成纯函数,换个名字吧。
上述内容就是在PHP无法使用json_encode函数对中文进行转义如何解决,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。