在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它。
这个函数的功能是将数值转换成json数据存储格式。
01 <?php
02 $arr = array
03 (
04 'Name'=>'中文一定要是utf-8编码',
05 'Age'=>23
06 );
07
08 $jsonencode = json_encode($arr);
09 echo $jsonencode;
10 ?>
程序运行结果如下:
1 {"Name":null,"Age":23}
json_encode 函数中中文被编码成 null 了,Google 了一下,很简单,为了与前端紧密结合,Json 只支持 utf-8 编码,我认为是前端的 Javascript 也是 utf-8 的原因。
1 <?php
2 $array = array
3 (
4 'title'=>iconv('gb2312','utf-8','这里是中文标题'),
5 'body'=>'asdf...'
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'=>'中文一定要是utf-8编码',
52 'Age'=>23
53 );
54
55
56 echo JSON($array);
57 ?>
这次成功了,运行结果如下:
1 {"Name":"中文一定要是utf-8编码","Age":"23"}
json_encode()和json_decode()是编译和反编译过程,注意json只接受utf-8编码的字符,所以json_encode()的参数必须是utf-8编码,否则会得到空字符或者null。
相关推荐
在PHP编程语言中,`json_encode()` 和 `json_decode()` 是两个非常重要的函数,它们用于在PHP和JSON数据格式之间进行转换。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其易于人阅读和编写,...
在PHP中,`json_decode`和`json_encode`是两个非常关键的函数,用于将JSON字符串转换为PHP变量,以及将PHP变量转换为JSON字符串。这篇日志将深入探讨这两个函数的使用方法和注意事项。 ### `json_decode` 函数 `...
在PHP中,`json_decode()`和`json_encode()`是两个非常重要的函数,它们主要用于JSON(JavaScript Object Notation)数据格式的编码与解码。JSON是一种轻量级的数据交换格式,因其简洁、易于阅读和编写,同时也容易...
在PHP中,经常需要处理JSON格式的数据,而`json_decode()`函数是用来解析JSON字符串的主要方式。但是有时候我们会发现,即使是看似完整的JSON字符串,在使用`json_decode()`函数解析后返回的却是NULL,这会让人困惑...
### JSON Decode 索引为数字时自动排序问题解析及解决方案 ...通过上述方案,可以有效地解决PHP中`json_decode`函数在处理数字索引时的自动排序问题,从而保证数据的准确性和业务逻辑的正常运行。
理解并熟练使用`json_encode`和`json_decode`,可以极大地提高你的Web应用的开发效率。 至于提供的压缩文件"jquery-json-read-only",可能包含了一些只读的jQuery JSON操作示例或者相关的工具。这些资源可以帮助...
json_encode_cn2使用正则替换,且依赖iconv函数,如果iconv存在bug相信也会有bug。json_decode_cn3使用曲线救国方式,自行urlencode生成的代码在各类语言中也非常容易urldecode。##json_decode_fixPHP的json_encode...
在PHP中,`json_encode`和`json_decode`是两个非常重要的函数,它们主要用于JSON(JavaScript Object Notation)数据格式的编码和解码。JSON是一种轻量级的数据交换格式,因其简洁、易读且易于机器解析而被广泛应用...
见和系统要求 * PHP* mbstring extension* Charset UTF-8使用 php-json 如果您有错误“调用未定义的函数 json_encode() 或 json_decode()”,只需添加: require_once("phpJson.class.php");或者 require_once(...
本文将详细介绍如何在PHP中使用`json_decode` 不转义中文的方法。 对于PHP 5.4及更高版本,`json_decode` 提供了一个第二个参数,允许我们控制转义行为。通过设置这个参数为 `JSON_UNESCAPED_UNICODE`,我们可以...
一、json_encode() 对变量进行JSON编码 语法:json_encode($value[,$options=0]) 注意: 1、$value为要编码的值,且该函数只对UTF8编码的数据有效; 2、options:由以下常量组成的二进制掩码:JSON_HEX_QUOT, ...
本文主要讨论了在使用`json_decode`时可能遇到的问题,并提供了相应的解决方法。 在场景描述中,开发者遇到了一个问题,即原本应该是空对象`{}`的数据字段在经过`json_decode`和后续处理后,变成了空数组`[]`。问题...
本文针对PHP中的json_encode()和json_decode()函数进行详细说明。这两个函数在PHP开发中广泛使用,用于在JavaScript Object Notation (JSON)格式与PHP数据类型之间转换。了解这两个函数的用法,对于实现前后端数据...
在PHP编程中,经常需要处理JSON格式的数据,`json_decode`是PHP提供的一个用于将JSON字符串转换为PHP变量的内置函数。然而,在某些情况下,当你使用`json_decode`解析包含大数字的JSON字符串时,PHP可能会自动将这些...
围绕json_encode()和json_decode()的简单包装,用于捕获任何错误而无需执行json_last_error() 。 在PHP 7.3中,这些函数将。 use Eastwest \ Json \ Json ; use Eastwest \ Json \ JsonException ; try { $ json =...
使用`json_decode`时需要注意,除了公共属性之外,类的其他成员(如常量、私有变量、受保护变量、方法等)在解码过程中将会丢失。 **4. 错误处理** 如果`json_decode`接收到的字符串不是有效的JSON格式,它会返回`...
据他所说,json_encode和json_decode比内置的serialize和unserialize函数要高效。 于是我决定动手实验,证实一下同事所说的情况是否属实。 实验分别在PHP 5.2.13和PHP 5.3.2环境下进行。 用同一个变量,分别用以上...