json_encode解析带中文的数组时会出现乱码。如何解决?

发布于 2022-08-29 22:45:31 字数 4094 浏览 23 评论 0

回复

阅读 17.7k
5 个回答

\u738b 是Unicode编码,如果在js中可以直接显示不用转换,不过也可以json_encode($arr, JSON_UNESCAPED_UNICODE);//php5.4+

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

回忆追雨的时光 2022-09-05 22:45:32

楼主可以先对中文进行 urlencode,最后再 urldecode 就可以了。

参考:php中json_encode中文编码问题

二智少女 2022-09-05 22:45:32

把要转成json的中文数组作为参数传递给jsonify函数

function jsonify($arr){
    foreach($arr as $key=>$value){
        $arr[$key]=url_encode($value);
}

function url_encode($str) {
    if(is_array($str)) {
        foreach($str as $key=>$value){
            $str[urlencode($key)] = url_encode($value);
        }
    }else{
        $str = urlencode($str);
    }

    return $str;
}
2022-09-05 22:45:32

我在utf-8编码下面从来就没出过问题。所以,如果你是gbk编码,试试这个:

$str = '中文';
$str = iconv("gbk", "utf-8", $str);
echo json_encode([$str]);
白昼 2022-09-05 22:45:32

//PHP版本5.4以上:
json_encode($data,JSON_UNESCAPED_UNICODE);

//PHP版本5.2以上才有json_encode/json_decode系列函数。
//PHP版本5.2-5.3,可以利用PHP的urlencode/urldecode的组合使用,可以达到类似的保留中文的效果。
//示例如下:代码里的MyJsonEncode和MyJsonDecode函数可以保留中文。

//数组转换保留为中文的JSON字符串
function MyJsonEncode($data){
    return urldecode(json_encode(MyUrlEncode($data)));
    //需要PHP版本5.4以上:
    //return json_encode($data,JSON_UNESCAPED_UNICODE);
}
//保留中文的JSON字符串转换为数组
function MyJsonDecode($data){
    $data = urlencode($data);
    $data = str_replace("%7B",'{',$data);
    $data = str_replace("%7D",'}',$data);
    $data = str_replace("%5B",'[',$data);
    $data = str_replace("%5D",']',$data);
    $data = str_replace("%3A",':',$data);
    $data = str_replace("%2C",',',$data);
    $data = str_replace("%22",'"',$data);
    return MyUrlDecode(json_decode($data,true));
}
//自定义的URL编码
function MyUrlEncode($data) {
    //可对关联数组进行URL编码,并处理换行符  
    //内部递归调用
    //用于MyJsonEncode函数调用
    if(!is_array($data)){
        $data = str_replace("\r",'\r',$data);
        $data = str_replace("\n",'\n',$data);
        $data = urlencode($data);
    }
    else {
        foreach($data as $key=>$value) {
            $data[MyUrlEncode($key)] = MyUrlEncode($value);
            if((string)MyUrlEncode($key)!==(string)$key){
                unset($data[$key]);
            }
        }
    }
    return $data;
}
//自定义的URL解码
function MyUrlDecode($data) {
    //可对关联数组进行URL解码,并处理换行符  
    //内部递归调用
    //用于MyJsonDecode函数调用
    if(!is_array($data)){
        $data = urldecode($data);
        $data = str_replace('\r',"\r",$data);
        $data = str_replace('\n',"\n",$data);
    }
    else {
        foreach($data as $key=>$value) {
            $data[MyUrlDecode($key)] = MyUrlDecode($value);
            if((string)MyUrlDecode($key)!==(string)$key){
                unset($data[$key]);
            }
        }
    }
    return $data;
}

//以上代码来自MyPHP开源函数库
//GitHub开源地址:https://github.com/MoonLord-LM/MyPHP
//我的Bloghttp://www.moonlord.cn

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文