首页 技术文章 php

php json_encode中文问题

发布日期: 2024-04-11
FontSize: 【
php json_encode中文问题

编程中,中文时不是总会有一些令人困扰的问题,例如怪字符、Unicode编码。

php中的json_encode可以把数组转换成json字符串,json格式是一种通用的数据格式,被运用的很频繁,特别是不同的系统相互调用数据的时候。您可能有时会遇到类似的问题,例如:

{"name":"\u5b88\u9875","year":2024}

如果不把这段json字符串转换成数组,很难辨认name的值是什么,我们希望name的值像year那么直观,具有可读性。

<?php
print_r('<pre>');/*用于页面打印结果的时候更好看*/
// 签名函数
$data = array(
    'name' => '守页',
    'year' => 2024
);

$json1 = json_encode($data);

print_r($json1);
echo "<br>";

$json2 = json_encode($data, JSON_UNESCAPED_UNICODE);

print_r($json2);
echo "<br>";

$data1 = json_decode($json1);

print_r($data1);

$data2 = json_decode($json2,true);
print_r($data2);
?>

运行结果是:

{"name":"\u5b88\u9875","year":2024}
{"name":"守页","year":2024}
stdClass Object
(
    [name] => 守页
    [year] => 2024
)
Array
(
    [name] => 守页
    [year] => 2024
)

如上所示,如果希望保留中文字符的原始形式而不是转义成Unicode编码,可以使用JSON_UNESCAPED_UNICODE选项。这个选项会让json_encode函数保持中文字符的原始形式。

另外,如果要将json数据转换成数组,在使用json_decode的时候,需要加一个参数true,否则转换的结果将是一个对象。

虽然我们会查询函数的语法,但总是会忽略某些参数,例如上面的JSON_UNESCAPED_UNICODE与true,我们总是忽略某些参数的原因,是因为语法里面经常会介绍各种参数,但经常用到的却很少。