Home >Backend Development >PHP Problem >How to convert array into json Chinese garbled code in php

How to convert array into json Chinese garbled code in php

PHPz
PHPzOriginal
2023-04-27 09:04:23698browse

PHP是一种非常强大的编程语言,它能够使开发人员轻松地创建具有各种功能的应用程序。这里,我们将讨论一个常见的PHP问题:将数组转换为JSON时中文乱码的问题。

问题:

在PHP中,我们通常会将一个数组转换为JSON格式的字符串,以此用于API响应或者在前端展示数据。但是,如果该数组中含有中文字符,经常会出现中文乱码的情况。

例如:

$data = array(
    'name' => '张三',
    'age' => 25
);
echo json_encode($data);

运行上述代码时,将得到以下结果:

{"name":"\u5f20\u4e09","age":25}

解释:

出现乱码的原因是在JSON编码中,中文字符会被以Unicode编码(\uxxxx)的形式表示。因此,在前端JavaScript通过JSON.parse()将其解析时,会出现乱码的情况。

解决方法:

在PHP中,有两种方法可以解决这个问题。

1.使用JSON_UNESCAPED_UNICODE选项

在json_encode()函数中,可以通过传递JSON_UNESCAPED_UNICODE选项来禁用Unicode编码,从而在输出中包含原始的中文字符。

例如:

$data = array(
    'name' => '张三',
    'age' => 25
);
echo json_encode($data, JSON_UNESCAPED_UNICODE);

此时运行上述代码,将得到如下所示的结果:

{"name":"张三","age":25}

这种方法非常简单,但是需要确保你的PHP版本支持JSON_UNESCAPED_UNICODE选项。这个选项在PHP 5.4.0及以上版本才被支持。

2.手动转换中文字符

另一种方法是手动将中文字符转换为Unicode编码,然后再将其转换为JSON格式。这种方法可以在任何版本的PHP中工作,甚至在旧的PHP版本中也可以使用。

例如:

function json_encode_cn($array) {
    $json = json_encode($array);
    $json = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', function ($matches) {
        return mb_convert_encoding(pack('H*', $matches[1]), 'UTF-8', 'UCS-2BE');
    }, $json);
    return $json;
}

$data = array(
    'name' => '张三',
    'age' => 25
);
echo json_encode_cn($data);

此时运行上述代码,将得到如下所示的结果:

{"name":"张三","age":25}

这个函数将使用正则表达式将Unicode编码从字符串中提取出来,然后使用mb_convert_encoding()函数将其转换为UTF-8编码格式的中文字符。最后,将该字符输出到JSON格式的字符串中。

结论:

以上是两种基本的解决方案:使用JSON_UNESCAPED_UNICODE选项禁用Unicode编码,或手动转换中文字符。这两种方法都可以解决将数组转换为JSON时中文乱码的问题。无论您选择哪种方法,确保您的数据可以被正确地解析和显示是至关重要的。

The above is the detailed content of How to convert array into json Chinese garbled code in php. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn