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

编程中,中文时不是总会有一些令人困扰的问题,例如怪字符、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,我们总是忽略某些参数的原因,是因为语法里面经常会介绍各种参数,但经常用到的却很少。