json_encode中文unicode的问题

近期做微信卡券开发遇到一个问题,创建卡券post数据给服务器时返回data format error, do NOT use json unicode encode (/uxxxx/uxxxx), please use utf8 encoded text!。这就奇怪了,代码中一直用的是UTF-8,怎么就跟unicode搭上关系了呢。一通搜索后发现,用PHP的json_encode来处理中文的时候,中文都会被编码,变成不可读的, 类似”/u***”的格式,微信服务器端不能接受。

$a = array(‘str1‘ => ‘中文‘, ‘str2‘ => ‘english‘);var_dump(json_encode($a));//string(40) "{"str1":"/u4e2d/u6587","str2":"english"}"

解决方法如下:

法一:

把汉字先urlencode然后再使用json_encode,json_encode之后再次使用urldecode来解码,这样编码出来的json数组中的汉字就不会出现unicode编码了。

$a = array(‘str1‘ => urlencode(‘中文‘), ‘str2‘ => ‘english‘); var_dump(urldecode(json_encode($a))); //string(34) "{"str1":"中文","str2":"english"}"

法二:

PHP 5.4中对json_encode对options可选参数增加JSON_UNESCAPED_UNICODE常量,即不编码为unicode

$a = array(‘str1‘ => ‘中文‘, ‘str2‘ => ‘english‘); var_dump(json_encode($a, JSON_UNESCAPED_UNICODE));//string(34) "{"str1":"中文","str2":"english"}"
时间: 2024-12-21 00:46:33

json_encode中文unicode的问题的相关文章

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中文乱码解决方法

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

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 中文显示问题

/** * 对数组和标量进行 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 (

PHP - json_encode中文乱码

调用json_encode()函数将JSON对象转换为字符串, 如果其中包含有中文,默认会输出为unicode编码,如\u8023. 解决方案1: 升级到PHP 5.4,在json_encode()函数中,第二个参数指定JSON_UNESCAPED_UNICODE即可. 解决方案2: 对于低版本PHP,对unicode码再进行解码,解码函数如下: function decodeUnicode($str) { return preg_replace_callback('/\\\\u([0-9a-f

php 中文unicode编码问题

现象:众所周知使用json_encode可以方便快捷地将对象进行json编码,但是如果对象的属性中存在着中文,问题也就随之而来了.json_encode会将中文转换为unicode编码,例如:'胥'经过json_encode处理后变为'\u80e5',最终的json中中文部分被替换为unicode编码.我们要解决的就是将对象转换为json并保证对象内部的中文在json中仍然是以正常的中文出现,现在看来只使用json_encode是不能达到目的的. 我的解决方法:先将类中的中文字段进行url编码(

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_e