php5.4一下 json_encode 不转义中文

转载地址:http://www.nowamagic.net/php/php_FunctionJsonEncode.php

在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它。

这个函数的功能是将数值转换成json数据存储格式。

01 <?php
02 $arr = array
03        (
04           ‘Name‘=>‘希亚‘,
05           ‘Age‘=>20
06        );
07  
08 $jsonencode = json_encode($arr);
09 echo $jsonencode;
10 ?>

程序运行结果如下:

1 {"Name":null,"Age":20}

json_encode 函数中中文被编码成 null 了,Google 了一下,很简单,为了与前端紧密结合,Json 只支持 utf-8 编码,我认为是前端的 Javascript 也是 utf-8 的原因。

1 <?php
2 $array = array
3     (
4         ‘title‘=>iconv(‘gb2312‘,‘utf-8‘,‘这里是中文标题‘),
5         ‘body‘=>‘abcd...‘
6     );
7  
8 echo json_encode($array);
9 ?>

这个程序的运行结果为:

1 {"title":"\u8fd9\u91cc\u662f\u4e2d\u6587\u6807\u9898","body":"abcd..."}

数组中所有中文在json_encode之后都不见了或者出现\u2353等。

解决方法是用urlencode()函数处理以下,在json_encode之前,把所有数组内所有内容都用urlencode()处理一下,然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来。

01 <?php
02 /**************************************************************
03  *
04  *  使用特定function对数组中所有元素做处理
05  *  @param  string  &$array     要处理的字符串
06  *  @param  string  $function   要执行的函数
07  *  @return boolean $apply_to_keys_also     是否也应用到key上
08  *  @access public
09  *
10  *************************************************************/
11 function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
12 {
13     static $recursive_counter = 0;
14     if (++$recursive_counter > 1000) {
15         die(‘possible deep recursion attack‘);
16     }
17     foreach ($array as $key => $value) {
18         if (is_array($value)) {
19             arrayRecursive($array[$key], $function, $apply_to_keys_also);
20         } else {
21             $array[$key] = $function($value);
22         }
23   
24         if ($apply_to_keys_also && is_string($key)) {
25             $new_key = $function($key);
26             if ($new_key != $key) {
27                 $array[$new_key] = $array[$key];
28                 unset($array[$key]);
29             }
30         }
31     }
32     $recursive_counter--;
33 }
34   
35 /**************************************************************
36  *
37  *  将数组转换为JSON字符串(兼容中文)
38  *  @param  array   $array      要转换的数组
39  *  @return string      转换得到的json字符串
40  *  @access public
41  *
42  *************************************************************/
43 function JSON($array) {
44     arrayRecursive($array, ‘urlencode‘, true);
45     $json = json_encode($array);
46     return urldecode($json);
47 }
48  
49 $array = array
50        (
51           ‘Name‘=>‘希亚‘,
52           ‘Age‘=>20
53        );
54  
55  
56 echo JSON($array);
57 ?>

这次成功了,运行结果如下:

1 {"Name":"希亚","Age":"20"}
时间: 2024-10-15 12:57:24

php5.4一下 json_encode 不转义中文的相关文章

从微信自定义菜单说php json_encode不转义中文汉字的方法

最近在开发微信自定义菜单. 接口比较简单,就是按微信要求的格式post一段json数据过去就成. 但我的菜单中里有中文,json_encode后出现了类似"\u5c0f\u8c61" 的unicode字符. 请求发出后被微信接口告知: {"errcode":40033,"errmsg":"invalid charset. please check your request, if include \\uxxxx will create

PHP JSON_ENCODE 不转义中文汉字的方法

ios程序中不识别读取到的JSON数据中 \u开头的数据. PHP 生成JSON的时候,必须将汉字不转义为 \u开头的UNICODE数据. 网上非常多,可是事实上都是错误的,正确的方法是在json_encode 中添?一个參数 JSON_UNESCAPED_UNICODE (by default7#zbphp.com) json_encode($data, JSON_UNESCAPED_UNICODE); //必须PHP5.4+ 官网的说明:http://php.net/manual/en/fu

解决php函数json_encode转换后中文被编码为unicode

大家都知道使用函数json_encode()可以方便快捷地将数组进行json编码转换,但是如果数组值存在着中文,json_encode会将中文转换为unicode编码,例如: <?PHP $array = array('中国','美国','高富帅','白富美','屌丝'); echo json_encode($array); 打印出的结果为: ["\u4e2d\u56fd","\u7f8e\u56fd","\u9ad8\u5bcc\u5e05&quo

php解决json_encode输出GB2312中文问题 (数组)

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

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

首先关于json_encode的gbk中文乱码,创建JSON函数,这一段来自网上某一位大侠 /************************************************************** * * 使用特定function对数组中所有元素做处理 * @param string &$array 要处理的字符串 * @param string $function 要执行的函数 * @return boolean $apply_to_keys_also 是否也应用到key

json_encode返回的中文乱码,解析不出

json_encode返回的中文乱码,解析不出,json_encode里面加个参数就行了 json_encode($data,JSON_UNESCAPED_UNICODE); 原文地址:https://www.cnblogs.com/yehuisir/p/12446009.html

php5.4以下,json_encode不转义实现方法

function json_encode($input){ // 从 PHP 5.4.0 起, 增加了这个选项. if(defined('JSON_UNESCAPED_UNICODE')){ return json_encode($input, JSON_UNESCAPED_UNICODE); } if(is_string($input)){ $text = $input; $text = str_replace('\\', '\\\\', $text); $text = str_replace

关于json转义中文

服务器传递或者程序传递中,不识别读取到的JSON数据中 \u开头的数据. PHP 生成JSON的时候,必须将汉字不转义为 \u开头的UNICODE数据. 网上很多,但是其实都是错误的,正确的方法是在json_encode 中加入一个参数 JSON_UNESCAPED_UNICODE  [php] view plain copy json_encode($data, JSON_UNESCAPED_UNICODE); //必须PHP5.4+ 官网的说明:http://php.net/manual/e

PHP json_encode() 不支持中文字符的解决方案 ch_json_encode()

function ch_json_encode($data) { function ch_urlencode($data) { if (is_array($data) || is_object($data)) { foreach ($data as $k => $v) { if (is_scalar($v)) { if (is_array($data)) { $data[$k] = urlencode($v); } else if (is_object($data)) { $data->$k