json_encode(json_encode的解决方法)
你是否想了解更多关于json_encode和json_encode的解决方法的知识?在本文中,小编将为您详细介绍这两个话题,帮助您更好地理解。
json_encode的解决方法
在json_encode()函数使用参数:JSON_UNESCAPED_UNICODE
json_encode($arr, JSON_UNESCAPED_UNICODE);也可以尝试使用这个简短的方法:
function jsonEncodeWithCN($data){
return preg_replace(/\\\u([0-9a-f]{4})/ie, iconv('UCS-2BE','UTF-8', pack('H4','$1')), json_encode($data));
}
如果是php5.4以前的版本使用以下方法<?php
*处理json_encode()不支持中文的情况
*
*实际应用中,当有中文字符时,当直接使用json_encode()函数会使汉字不能正常显示
*所以有了这个适用性比较广的函数 ch_json_encode()来解决这个问题
*
* charset: UTF-8
* create date: 2012-7-8
*@author Zhao Binyan
*@copyright(C) 2011-2012 itbdw
*//**
*处理 json_encode()不支持中文的情况
*
*@param array|object$data
*@return array|object
*/
function ch_json_encode($data){
/**
*将中文编码
*@param array$data
*@returnstring
*/
function ch_urlencode($data){
if(is_array($data)|| is_object($data)){
foreach($dataas$k=>$v){
if(is_scalar($v)){
if(is_array($data)){
$data[$k]= urlencode($v);
} elseif(is_object($data)){
$data->$k=urlencode($v);
}
} elseif(is_array($data)){
$data[$k]= ch_urlencode($v);//递归调用该函数
} elseif(is_object($data)){
$data->$k= ch_urlencode($v);
}
}
}
return$data;
}
$ret= ch_urlencode($data);
$ret=json_encode($ret);
return urldecode($ret);
}
注意,字符编码必须是 utf-8。
使用json_encode
Json做为一种轻量级的数据交换格式,开始受到青睐,有与 XML抢地盘的风头。而让人高兴的是,php也把 json序列化数据的功能内置成函数了,这让想使用json的 PHPCoder备感方便。美中不足的是,json_encode/ json_decode系列函数只有在 php5.2以上才有。这让立志开发兼容性强的PHP系统的coder很头痛。幸好,已经有人把 json的方法封装成 php4.x系列甚至更低的版本都可以执行的类了。这里要先谢谢先驱了。让我们可以踩在巨人的肩膀上走向成功。
使用方法:
if( function_exists(json_encode)){return json_encode($phparr);}else{require_once ROOT.include/json.class.php;$json= new Services_JSON;return$json->encode($phparr);}?>
如何正确运用PHP json_encode函数进行中文转换
在 php中使用 json_encode()内置函数(php>5.2)可以使用得 php中数据可以与其它语言很好的传递并且使用它。这个函数的功能是将数值转换成json数据存储格式,但是转换后的中文会变成Unicode编码。\x0d\x0a[php] view plaincopyprint?\x0d\x0a'希亚', \x0d\x0a'Age'=>20 \x0d\x0a); \x0d\x0a \x0d\x0a$jsonencode= json_encode($arr); \x0d\x0aecho$jsonencode; \x0d\x0a?> \x0d\x0a程序运行结果如下:\x0d\x0a[php] view plaincopyprint?\x0d\x0a{"Name":null,"Age":20} \x0d\x0ajson_encode函数中中文被编码成 null了,Google了一下,很简单,为了与前端紧密结合,Json只支持 utf-8编码,我认为是前端的 Javascript也是 utf-8的原因。\x0d\x0a[php] view plaincopyprint?\x0d\x0aiconv('gb2312','utf-8','这里是中文标题'), \x0d\x0a'body'=>'abcd...' \x0d\x0a); \x0d\x0a \x0d\x0aecho json_encode($array); \x0d\x0a?> \x0d\x0a这个程序的运行结果为:\x0d\x0a[php] view plaincopyprint?\x0d\x0a{"title":"\u8fd9\u91cc\u662f\u4e2d\u6587\u6807\u9898","body":"abcd..."} \x0d\x0a数组中所有中文在json_encode之后都不见了或者出现\u2353等。解决方法是用urlencode()函数处理以下,在json_encode之前,把所有数组内所有内容都用urlencode()处理一下,然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来。\x0d\x0a[php] view plaincopyprint?\x0d\x0a 1000){ \x0d\x0a die('possible deep recursion attack'); \x0d\x0a} \x0d\x0a foreach($array as$key=>$value){ \x0d\x0a if(is_array($value)){ \x0d\x0a arrayRecursive($array[$key],$function,$apply_to_keys_also); \x0d\x0a} else{ \x0d\x0a$array[$key]=$function($value); \x0d\x0a} \x0d\x0a \x0d\x0a if($apply_to_keys_also&& is_string($key)){ \x0d\x0a$new_key=$function($key); \x0d\x0a if($new_key!=$key){ \x0d\x0a$array[$new_key]=$array[$key]; \x0d\x0a unset($array[$key]); \x0d\x0a} \x0d\x0a} \x0d\x0a} \x0d\x0a$recursive_counter--; \x0d\x0a} \x0d\x0a \x0d\x0a/************************************************************** \x0d\x0a* \x0d\x0a*将数组转换为JSON字符串(兼容中文) \x0d\x0a*@param array$array要转换的数组 \x0d\x0a*@return string转换得到的json字符串 \x0d\x0a*@access public \x0d\x0a* \x0d\x0a*************************************************************/ \x0d\x0afunction JSON($array){ \x0d\x0a arrayRecursive($array,'urlencode', true); \x0d\x0a$json= json_encode($array); \x0d\x0a return urldecode($json); \x0d\x0a} \x0d\x0a \x0d\x0a$array= array \x0d\x0a( \x0d\x0a'Name'=>'希亚', \x0d\x0a'Age'=>20 \x0d\x0a); \x0d\x0a\x0d\x0aecho JSON($array); \x0d\x0a?> \x0d\x0a这次成功了,运行结果如下:\x0d\x0a[php] view plaincopyprint?\x0d\x0a{"Name":"希亚","Age":"20"}
PHP中json_encode中文乱码问题
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).'})';
END,本文到此结束,如果可以帮助到大家,还望关注本站哦!