php json_encode utf-8中文问题

utf-8字符json_encode为变成转成utf16编码,也就是介个样子:

 代码如下 复制代码

$ ./php/bin/php -r 'echo json_encode("中文");'
"u4e2du6587"

可读性降低,最新的php 5.4的json_encode支持了UTF-8编码,可以把中文不编码直接输出。
那低版本怎么办呢?也有办法,封装成一个函数给大家分享一下:

 代码如下 复制代码

function my_json_encode($var) {
    return preg_replace("/u([a-f0-9]{4})/e", "iconv('UCS-4LE','UTF-8',pack('V', hexdec('U$1')))", json_encode($var));
}

例,利用另一种办法来解决

后台PHP页面(页面编码为UTF-8或者已经把字符转为UTF-8)使用json_encode将PHP中的array数组转为JSON字符串。例如:

 代码如下 复制代码

<?php
  $testJSON=array('name'=>'中文字符串','value'=>'test');
  echo json_encode($testJSON);
?>

查看输出结果为:
{“name”:”u4e2du6587u5b57u7b26u4e32″,”value”:”test”}

可见即使用UTF8编码的字符,使用json_encode也出现了中文乱码。解决办法是在使用json_encode之前把字符用函数urlencode()处理一下,然后再json_encode,输出结果的时候在用函数urldecode()转回来。具体如下:

 代码如下 复制代码

<?php
    $testJSON=array('name'=>'中文字符串','value'=>'www.111cn.net'');
    //echo json_encode($testJSON);
    foreach ( $testJSON as $key => $value ) {
  $testJSON[$key] = urlencode ( $value );
    }
    echo urldecode ( json_encode ( $testJSON ) );
?>

查看输出结果为:

{“name”:”中文字符串”,”value”:”www.111cn.net”}

到此,成功地输出了中文字符

时间: 2024-09-26 14:33:03

php json_encode utf-8中文问题的相关文章

json_encode不支持中文解决方法

/**************************************************************  02  *  03  *    使用特定function对数组中所有元素做处理  04  *    @param    string    &$array        要处理的字符串  05  *    @param    string    $function    要执行的函数  06  *    @return boolean    $apply_to_key

PHP数组传递给JavaScript以及json_encode的gbk中文乱码的解决

 代码如下 复制代码 /**************************************************************  * *    使用特定function对数组中所有元素做处理 *    @param    string    &$array        要处理的字符串 *    @param    string    $function    要执行的函数 *    @return boolean    $apply_to_keys_also       

php中json_decode()和json_encode()用法与中文不显示解决办法

php中json_decode()和json_encode() 1.json_decode() json_decode (PHP 5 >= 5.2.0, PECL json >= 1.2.0) json_decode - 对 JSON 格式的字符串进行编码 说明 mixed json_decode ( string $json [, bool $assoc ] ) 接受一个 JSON 格式的字符串并且把它转换为 PHP 变量 参数 json 待解码的 json string 格式的字符串. a

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

$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之前,把所有数组内所有内容都

PHP使用json_encode函数时不转义中文的解决方法_php技巧

本文实例讲述了PHP使用json_encode函数时不转义中文的解决方法.分享给大家供大家参考.具体方法如下: json_encode函数对于gbk中的中文字符是不会转换的或直接转换成空格了,本文就来给各位整理一个关于json不转义中文问题处理技巧,相信对大家有所帮助. 如果你调用 PHP 自带的 json_encode() 函数, 碰到中文时, 中文会被转义掉. 例如: 复制代码 代码如下: echo json_encode(array('你好')); // 输出: ["\u4f60\u597

PHP json_encode() 函数详解及中文乱码问题_php实例

在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它. 这个函数的功能是将数值转换成json数据存储格式. <?php $arr = array ( 'Name'=>'希亚', 'Age'=> ); $jsonencode = json_encode($arr); echo $jsonencode; ?> 程序运行结果如下: {"Name":null,"Age&

解决json_encode 函数中文被编码成 null的办法

json格式在开发中用的十分广泛.在php中json_encode函数可以直接将数组转成 json格式,十分方便.但是有可能你在使用json_encode函数时,无奈的发现中文被编码成null了.原来json只支持转义utf-8编码格式的中文.php数组使用json_encode函数中文被编码成null的原因是转义gbk 或者别的编码时,中文被忽略了.一般出现在文档编码或者输出的内容编码是非UTF-8时,也就是说,GBK或者GB2312的中文,就会出现编码失败的现象. php数组使用json_e

PHP json_encode()函数json不转义中文问题解决办法

如果你调用 PHP 自带的 json_encode() 函数, 碰到中文时, 中文会被转义掉. 例如: echo json_encode(array('你好')); // 输出: ["\u4f60\u597d"] 这非常恼人, 像是一堆乱码, JSON 标准从来没有说要把非 ASCII 字符转义, 标准说的是"Any UNICODE character". 如何禁用掉这种转义呢? 答案是, PHP 自带的 json_encode() 不能禁用这个特性(在 5.4.0

PHP json_encode中文乱码问题的解决办法_php技巧

下面的PHP代码可以解决以下问题:1.json_encode UTF8码中文后的字符串不可阅读2.json_encode 多级数组中文乱码问题3.json_encode 数组中包含换行时错误问题4.json_encode 数组中键为中文的问题 复制代码 代码如下: function _encode($arr){  $na = array();  foreach ( $arr as $k => $value ) {      $na[_urlencode($k)] = _urlencode ($v

PHP5.4中json_encode中文转码的变化小结_php技巧

在php5.4以前做json_encode的时候中文会被unicode编码,中文都会被编码,变成不可读的,类似"\u***"的格式,还会在一定程度上增加传输的数据量. 例如: 复制代码 代码如下: <?php $str = '中文'; echo json_encode($str); //"\u4e2d\u6587" php5.4开始 echo json_encode($str, JSON_UNESCAPED_UNICODE); //"中文"