知识屋:更实用的电脑技术知识网站
所在位置:首页 > 编程技术 > PHP编程

PHP JSON中文

发布时间:2014-09-05 11:01:23作者:知识屋

    在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它。

这个函数的功能是将数值转换成json数据存储格式。

[php] 
<?php 
$arr = array 
       ( 
          'Name'=>'希亚', 
          'Age'=>20 
       ); 
 
$jsonencode = json_encode($arr); 
echo $jsonencode; 
?> 

程序运行结果如下:

[php] 
{"Name":null,"Age":20} 

        json_encode 函数中中文被编码成 null 了,Google 了一下,很简单,为了与前端紧密结合,Json 只支持 utf-8 编码,我认为是前端的 Javascript 也是 utf-8 的原因。
[php]
<?php 
$array = array 
    ( 
        'title'=>iconv('gb2312','utf-8','这里是中文标题'), 
        'body'=>'abcd...' 
    ); 
 
echo json_encode($array); 
?> 

     这个程序的运行结果为:

[php] 
{"title":"/u8fd9/u91cc/u662f/u4e2d/u6587/u6807/u9898","body":"abcd..."} 
      数组中所有中文在json_encode之后都不见了或者出现/u2353等。

      解决方法是用urlencode()函数处理以下,在json_encode之前,把所有数组内所有内容都用urlencode()处理一下,然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来。

[php] 
<?php 
/**************************************************************
 *   www.zhishiwu.com
 *  使用特定function对数组中所有元素做处理
 *  @param  string  &$array     要处理的字符串
 *  @param  string  $function   要执行的函数
 *  @return boolean $apply_to_keys_also     是否也应用到key上
 *  @access public
 *
 *************************************************************/ 
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); 
?> 

     这次成功了,运行结果如下:
[php] view plaincopy
{"Name":"希亚","Age":"20"} 
作者:wolinxuebin

(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜