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中文乱码问题,但是都不管用,请问还有什么办法可以解决?
$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中文乱码问题的主要内容,如果未能解决你的问题,请参考以下文章