PHP中json_encode中文乱码问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP中json_encode中文乱码问题相关的知识,希望对你有一定的参考价值。

定义以下函数:
function show($status, $message,$data=array())
$result = array(
'status' => $status,
'message' => urlencode($message),
'data' => $data,
);

exit(urldecode(json_encode($result)));

调用之后:
show(0,"用户名不能为空");
结果如下:
"status":0,"message":"鐢ㄦ埛鍚崭笉鑳戒负绌猴紒","data":[]

若是改为:
function show($status, $message,$data=array())
$result = array(
'status' => $status,
'message' => $message,
'data' => $data,
);

exit(json_encode($result, JSON_UNESCAPED_UNICODE));

调用之后:
show(0,"用户名不能为空");
结果还是一样:
"status":0,"message":"鐢ㄦ埛鍚崭笉鑳戒负绌猴紒","data":[]

以上是网上搜罗的两种方法,用以解决json_encode中文乱码问题,但是都不管用,请问还有什么办法可以解决?

参考技术A php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它。这个函数的功能是将数值转换成json数据存储格式
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
echo json_encode($arr);
//结果
//"a":1,"b":2,"c":3,"d":4,"e":5
/*
下面看一款json_encode中文乱码问题
解决方法是用urlencode()函数处理以下,在json_encode之前,把所有数组内所有内容都用urlencode()处理一下,然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来
*/
function arrayrecursive(&$array, $function, $apply_to_keys_also = false)

static $recursive_counter = 0;
if (++$recursive_counter > 1000)
die('possible deep recursion attack');

foreach ($array as $key => $value)
if (is_array($value))
arrayrecursive($array[$key], $function, $apply_to_keys_also);
else
$array[$key] = $function($value);

if ($apply_to_keys_also && is_string($key))
$new_key = $function($key);
if ($new_key != $key)
$array[$new_key] = $array[$key];
unset($array[$key]);



$recursive_counter--;

/**************************************************************
*
* 将数组转换为json字符串(兼容中文)
* @param array $array 要转换的数组
* @return string 转换得到的json字符串
* @access public
*
*************************************************************/
function json($array)
arrayrecursive($array, 'urlencode', true);
$json = json_encode($array);
return urldecode($json);

$array = array
(
'name'=>'希亚',
'age'=>20
);
echo json($array);
//应用实例
$servname="localhost";
$sqlservname="root";
$sqlservpws="123456";
$sqlname="lock1";
$db=mysql教程_connect($servname,$sqlservname,$sqlservpws) or die("数据库教程连接失败");
mysql_select_db($sqlname,$db);
$sql = "select * from t_operater";
$result =mysql_query($sql);
$rows = mysql_num_rows($result);
while($obj = mysql_fetch_object($result))

$arr[] = $obj;

echo '("total":"'.$rows.'","results":'.json_encode($arr).')';

PHP 数组中出现中文乱码,json_encode返回结果为null 或false

想要解决这个问题,没有特别方便的方法,只有循环数组,将数组中的key和value字符串转码,转换为utf-8,即可解决问题。

代码示例:

 

以上是关于PHP中json_encode中文乱码问题的主要内容,如果未能解决你的问题,请参考以下文章

PHP json_encode中文乱码解决方法

PHP json_encode 中文乱码

PHP json_encode 中文乱码

PHP 数组中出现中文乱码,json_encode返回结果为null 或false

php json_encode() 输出乱码问题

PHP JSON_ENCODE使用后中文变成百分号乱码了