Heim  >  Artikel  >  Backend-Entwicklung  >  php数组转json显示中文的一句代码,求解释

php数组转json显示中文的一句代码,求解释

WBOY
WBOYOriginal
2016-06-23 14:12:401112Durchsuche

本帖最后由 wang23412 于 2013-06-09 17:05:27 编辑

PHP JSON 中文 编码

我用php把数组转成json格式传给jquery 时发现中文会变成奇怪的编码。于是在网上找了下解决方法,看到很多人用下面两个函数解决了:
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--;}

function JSON($array) { arrayRecursive($array, 'urlencode', true); $json = json_encode($array); return urldecode($json);}

我测试了下确实能解决问题,于是仔细研究了下代码,发现如下这句代码不知道是什么意思:
$array[$key] = $function($value);

我在这句话前后分别输出$array[$key]看下值,发现这句话把中文变成了一串编码。
求各位大侠解释下$function($value)是什么意思。

回复讨论(解决方案)

咳咳 你可以把‘$function’替换成传进去才参数$function的值再看

定义
function arrayRecursive(&$array,  $function, $apply_to_keys_also = false) 中
$array[$key] =  $function($value);

调用
arrayRecursive($array, ' urlencode', true);

所以 $array[$key] = $function($value);
就是 $array[$key] = urlencode($value);

呃。。好吧。。是传进来的参数。。我低端了……

定义
function arrayRecursive(&$array,  $function, $apply_to_keys_also = false) 中
$array[$key] =  $function($value);

调用
arrayRecursive($array, ' urlencode', true);

所以 $array[$key] = $function($value);
就是 $array[$key] = urlencode($value);

这么看来这两个函数的作用就是先把数组中的每个值urlencode一下,然后json_encode转换成json格式,最后再把json格式的字符串urldecode。谢谢啦。真是看代码看得脑袋都转不过弯了

这个函数是针对 gbk 编码数据的
对于 utf-8 的数据,应该是不需要这样做的

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn