>php教程 >php手册 >php json_encode实现与中文乱码解决方法

php json_encode实现与中文乱码解决方法

WBOY
WBOY원래의
2016-05-25 16:46:161087검색

php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它,这个函数的功能是将数值转换成json数据存储格式.

<?php
$arr = array (&#39;a&#39;=>1,&#39;b&#39;=>2,&#39;c&#39;=>3,&#39;d&#39;=>4,&#39;e&#39;=>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()将编码过的中文转回来.

<?php
function arrayrecursive(&$array, $function, $apply_to_keys_also = false) {
    static $recursive_counter = 0;
    if (++$recursive_counter > 1000) {
        die(&#39;possible deep recursion attack&#39;);
    }
    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, &#39;urlencode&#39;, true);
    $json = json_encode($array);
    return urldecode($json);
}
$array = array(
    &#39;name&#39; => &#39;希亚&#39;,
    &#39;age&#39; => 20
);
echo json($array);
?>

应用实例:

<?php
$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 &#39;({"total":"&#39; . $rows . &#39;","results":&#39; . json_encode($arr) . &#39;})&#39;;
?>

               
               

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.