PHP的json_encode中文被转码的问题

在php5.2中做json_encode的时候。中文会被unicode编码, 
php5.3加入了options参数, 
5.4以后才加入JSON_UNESCAPED_UNICODE,这个参数,不需要做escape和unicode处理。 
所以在5.4之前都需要对中文做个处理

5.4里面的处理 

json_encode($str, JSON_UNESCAPED_UNICODE);

5.4之前,有两种方法处理 

方法1

function encode_json($str){
    $code = json_encode($str);
    return preg_replace("#\\\u([0-9a-f]+)#ie", "iconv(‘UCS-2‘, ‘UTF-8‘, pack(‘H4‘, ‘\\1‘))", $code);
}  

方法1.在实际应用中有个问题,部分字符会掉,不止为何,如字符串:"日期11.2"会被变成"日期.2"

方法2.

先对需要处理的做urlencode处理,然后json_encode,最后做urldecode处理

function encode_json($str) {
    return urldecode(json_encode(url_encode($str)));
}  

/**
 *
 */
function url_encode($str) {
    if(is_array($str)) {
        foreach($str as $key=>$value) {
            $str[urlencode($key)] = url_encode($value);
        }
    } else {
        $str = urlencode($str);
    }  

    return $str;
}  
时间: 2024-10-16 22:05:21

PHP的json_encode中文被转码的问题的相关文章

php 解决json_encode中文UNICODE转码问题

原文地址:php 解决json_encode中文UNICODE转码问题 用PHP的json_encode来处理中文的时候, 中文都会被编码, 变成不可读的, 类似"\u***"的格式,如果想汉字不进行转码, 这里提供三种方法 1.升级PHP,在PHP5.4, 这个问题终于得以解决, Json新增了一个选项: JSON_UNESCAPED_UNICODE, 故名思议, 就是说, Json不要编码Unicode. 2.把汉字先urlencode然后再使用json_encode,json_e

解决json_encode中文UNICODE转码问题

用PHP的json_encode来处理中文的时候, 中文都会被编码, 变成不可读的, 类似"\u***"的格式,如果想汉字不进行转码,这里提供三种方法 1.升级PHP,在PHP5.4, 这个问题终于得以解决, Json新增了一个选项: JSON_UNESCAPED_UNICODE, 故名思议, 就是说, Json不要编码Unicode. <?php echo json_encode("中文", JSON_UNESCAPED_UNICODE); //"

php 解决json_encode中文null和UNICODE转码问题

1.iconv("gb2312","utf-8//IGNORE",$str),转码,这样转码后显示的汉字是uicode码,下面将unicode转为中文2.$array = array( 'test'=>urlencode("我是测试") ); $array = json_encode($array); echo urldecode($array); //{"test":"我是测试"} php 解决js

PHP json_encode 中文乱码

在编码过程中.经常会用到json_encode来处理中文.但是.出现一个问题.中文都会被转码.变为" \u**** "的格式.如何避免被转码.1:PHP的版本为5.4以上:echo json_encode( '中文' ); // "\u4e2d\u6587"echo json_encode( '中文', JSON_UNESCAPED_UNICODE ); // "中文"2:先把汉字urlencode转码.在json_encode; 然后urlde

PHP json_encode中文乱码解决方法

<?php /** * [PHP json_encode中文乱码解决方法] * 这里说的"中文乱码"其实不是不是真的乱码,而是在最后的json结果中显示下面的字串: * {"name":"\u4e2d\u6587\u5b57\u7b26\u4e32″,"value":"test"} * * [解决办法] * 在使用json_encode之前把字符用函数urlencode()处理一下,然后再json_encode

如何过滤 非中文的Unicode码

如何过滤 非中文的Unicode码,如 "我愿为你摘一朵鲜花 \u4e00-\u9fa5

Ireport+JS处理扫描中文二维码

关于JasperReport的基础应用参考: IReport+JasperReport+Applet报表打印 应用IReport+JasperReport处理含中文二维码的思路与过程. 在报表中展现二维条码. 适应扫描器操作处理(中文转义). 结合JS使用条码. 第一部分 在报表中展现二维条码: 参考:iReport中产生二维条码(QR Code) 思路:应用zxing工具包生成二维码的图形,并写入在IReport报表的图像组件中. 步骤1:下载core.jar和javase.jar. 步骤2:

eclipse properties 文件中文变Unicode码

相信很多朋友在使用MyEclipse或者Eclipse时,会经常遇到将代码格式化一下,中文就转码成了Unicode码了,本文将简单介绍如何解决这一情况. 我们格式化代码后或者一打开代码就出现如下界面,这里请注意是"\u"开头的并非乱码. 在Eclipse Marketplace 下载Properties Editor插件,安装完成后, 我们选中属性文件,右键"open with"->"properties Edit" 即可,如图: 如果嫌麻

php 处理 json_encode 中文显示问题

/** * 对数组和标量进行 urlencode 处理 * 通常调用 wphp_json_encode() * 处理 json_encode 中文显示问题 * @param array $data * @return string */ function wphp_urlencode($data) { if (is_array($data) || is_object($data)) { foreach ($data as $k => $v) { if (is_scalar($v)) { if (