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

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

WBOY
WBOYOriginal
2016-05-25 16:46:161087browse

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;;
?>

               
               

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn