php json中文编码为null 的解决办法

el/2024/5/21 22:03:12

今天使用json_encode函数,发现中文竟成了null。

原因分析:使用json_encode函数应应使用utf-8编码,我的页面用的是gbk.

解决:在json_encode函数前使用iconv('gbk','utf8')函数。函数

function gbk2utf8($data)

{

  if(is_array($data))

    {

        return array_map('gbk2utf8', $data);

    }

  return iconv('gbk','utf-8',$data);

}

//以下是找的另一种方法


php从数据库中得到的字段是中文,想用json_encode()后返回给前台,可是json_encode对中文编码后为null。


在 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);
09echo $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 
8echo 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 *************************************************************/
11function 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 *************************************************************/
43function 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 
56echo JSON($array);
57?>

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

1{"Name":"希亚","Age":"20"}

感谢连接 http://www.nowamagic.net/php/php_FunctionJsonEncode.php



http://www.ngui.cc/el/5281715.html

相关文章

string 到 int的转换

1. c中string到int的转换 1) 在C标准库里面&#xff0c;使用atoi&#xff1a; #include <cstdlib> #include <string> std::string text "152"; int number std::atoi( text.c_str() ); if (errno ERANGE) //可能是std::errno { …

[linker error] undefined reference to vtable for **

1.在开始——所有程序——Qt by Trolltech v4.3.0&#xff08;opensource&#xff09;找到Qt 4.3.0Command Prompt 2.在Command Prompt找到工程的路径 3.moc xxxx.h 4.右击Command Prompt,选全选&#xff0c;按CTRLC 5.将复制的内容粘贴到任何一个记事本里 6.将生成的代码粘贴到…

判断点是否在三角形内[转]

本文只是翻译和整理&#xff0c;原文在此http://www.blackpawn.com/texts/pointinpoly/default.html 概述 给定三角形ABC和一点P(x,y,z)&#xff0c;判断点P是否在ABC内。这是游戏设计中一个常见的问题。需要注意的是&#xff0c;这里假定点和三角形位于同一个平面内。 本文…

word中mathtype公式编辑

一 mathtype工具栏在word中消失 解决&#xff1a;如果安装了mathtype&#xff0c;则是没有加载或加载不成功。 1&#xff0c; 点击左上角的菜单&#xff0c;在右下角打开word选项&#xff0c;选中“加载项”&#xff0c;选中右边的“mathpage.wll”&#xff0c;在下面管理中选…

google 的广告系统

很多人使用 Google 的产品和服务很多年&#xff0c;一直不清楚 Google 靠什么挣钱&#xff0c;因为 Google 的服务全部是免费的。答案是搜索广告和与网页内容相关的广告。&#xff08;当然&#xff0c;Google 还有一些企业级产品&#xff0c;但是这些产品占不到营业额的百分之五…

排序比较函数

七种qsort排序方法 <本文中排序都是采用的从小到大排序> 一、对int类型数组排序 int num[100]; Sample: int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; } qsort(num,100,sizeof(num[0]),cmp); 二、对char类型数组排序&#xff08;同int类型…

python dict访问

今天把一个150多万的key装进dict, 对数据量上百万的查询dict, 判断某个key是否在dict中&#xff0c;听某些人(网上)说用 key in dict.keys();速度会比 dict.has_key(key)要快很多。 结果我使用了下面的语句&#xff1a; if key in dict.keys(): value dict[key] do_somethi…

shell, python中比较两个日期的先后

在Shell中我们可以利用date命令比较两个日期的大小&#xff0c;方法是先把日期转换成时间戳格式&#xff0c;再进行比较。 date 的%s可以将日期转换成时间戳格式,看下面的例子&#xff1a; #!/bin/bash date1"2008-4-09 12:00:00" date2"2008-4-10 15:00:…

测试驱动开发(Test-Driven Development)

最近看了下测试驱动开发(Test-Driven Development), 第一部分用一个资金实例讲解测试驱动开发模式&#xff08;采用java编写示例&#xff09;&#xff0c;感觉挺不错的。 不过这种模式需要编写跟功能代码量相当的测试代码&#xff1b;一步一步的测试保证&#xff0c;在大系统中…

POI导出数据到EXCEL经典实现

转载出处&#xff1a;http://blog.csdn.net/lenolong/article/details/3957735 在web开发中&#xff0c;有一个经典的功能&#xff0c;就是数据的导入导出。特别是数据的导出&#xff0c;在生产管理或者财务系统中用的非常普遍&#xff0c;因为这些系统经常要做一些报表打印的工…