php中json_encode UTF-8中文乱码问题

最近在接口代码当中用到过json_encode,在网上找到说json_encode编码设置为UTF-8中文就不会乱码,经验证这办法确实是有效果的,但是不知道为什么,代码在用过一段时间之后就不太管用了。以下是自己的解决json_encode的办法。有更好的方法请分享出来吧!

第一种:

这种简单的做一个代码转换,urlcode之后再返回所需数组

我代码这样就足够了。

代码如下 复制代码 
public static function encodeOperations ($array)

{

foreach ((array)$array as $key => $value) {

if (is_array($value)) {

encodeOperations($array[$key]);

} else {

$array[$key] = urlencode(mb_convert_encoding($value,‘UTF-8‘,‘GBK‘));

}

}

return $array;

}

第二种:

这种是在网上看到的,然后就是有评论说会出现无限循环的问题,但是这显然很全面的,然后我测试之后也确实有,贴这里仅供参考

代码如下 复制代码

/**************************************************************

*

* 使用特定function对数组中所有元素做处理

* @param string &$array 要处理的字符串

* @param string $tocode 编码后

* @param string $oldcode 编码前

* @param string $function 要执行的函数

* @return boolean $apply_to_keys_also 是否也应用到key上

* @return array $array 是否也应用到key上

* @access public

*

*************************************************************/

function encodeOperations (&$array, $function, $tocode=false,$oldcode=false,$apply_to_keys_also = false)

{

foreach ($array as $key => $value) {
(www.111cn.net)
if (is_array($value)) {

encodeOperations($array[$key], $function, $apply_to_keys_also);

} else {

if($tocode&&$oldcode) {

if(function_exists(mb_convert_encoding)) {

$value = mb_convert_encoding($value,$tocode,$oldcode);

}else{

return "error";

}

}

$array[$key] = $function($value);

}

if ($apply_to_keys_also && is_string($key)) {

$new_key = $function($key);

if ($new_key != $key) {

$array[$new_key] = $array[$key];

unset($array[$key]);

}

}

}

return $array;

}

/****from:http://www.111cn.net/phper/31/66729.htm**********************************************************

*

* 将数组转换为JSON字符串(兼容中文)

* @param array $array 要转换的数组

* @return string 转换得到的json字符串

* @access public

*

*************************************************************/

function JSON($array) {

arrayRecursive($array, ‘urlencode‘, true);

$json = json_encode($array);

return urldecode($json);

}

对中文返回是null空的话我们需要进行字符转换成uft8或者先使用urlencode进行编译呼。

时间: 2024-08-26 15:27:21

php中json_encode UTF-8中文乱码问题的相关文章

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

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

oracle中imp导入数据中文乱码问题(转)

(转自  http://blog.chinaunix.net/uid-186064-id-2823338.html) oracle中imp导入数据中文乱码问题 用imp命令向oracle中导入数据后,所有查询出的中文字段都为乱码. 原则上不修改服务器端的字符集,修改服务器端的字符集会出现使用第三方工具登陆数据库出现乱码的情况(具体服务器端的字符集修改办法本文有详细介绍). 将DMP文件的字符集改成与Oracleo数据库服务器端一样之后导入可正常显示.本人的系统是RHEL 5.4 32bit 一.

Java中使用FileputStream导致中文乱码问题的修改方案

1 package com.pocketdigi; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.InputStreamReader; 8 import java.io.OutputStreamWriter; 9 10 public class Main { 11

VS2010中wmain入口函数中使用wprintf输出中文乱码问题

生活中的单例 中国(China),位于东亚,是一个以华夏文明为主体.中华文化为基础,以汉族为主要民族的统一多民族国家,通用汉语.中国疆域内的各个民族统称为中华民族,龙是中华民族的象征.古老的中国凭借自身的发展依旧美丽的屹立于东方民族之林,闪耀着她动人的光彩,世界上只有一个中国,任何部分都是祖国不可分割的一部分,今天我们的设计模式就从伟大的祖国开始说起---单例模式. 详解单例模式 单例模式是什么?跟我们的祖国有着怎样的关系呢?首先我们来看一下单例,从"单例"字面意思上理解为-一个类只有

在Servlet中出现一个输出中文乱码的问题(已经解)。

在Servlet中出现一个输出中文乱码的问题,已经解. @Override public void doPost(HttpServletRequest reqeust, HttpServletResponse response) throws ServletException, IOException { //PrintWriter out = response.getWriter();在还没有给response指定编码格式时就获取了他的输出流,所以一直乱码 reqeust.setCharact

windows中的txt文件上传到linux中,打开出现中文乱码

问题:在windows中显示正常的文件,上传到linux中,打开出现中文乱码. 解决方案:使用iconv命令 例如:iconv -f gbk -t utf8 shujujiegou.txt > shujujiegou.txt.utf8 原文地址:https://www.cnblogs.com/huangtao1927/p/8660815.html

Windows下Git Bash中VIM打开文件中文乱码

Windows下Git Bash中VIM打开文件中文乱码,解决方法是: 步骤一 [email protected] MINGW64 /d/项目GGE/Hard_for_GGE (master)$ cd /etc/ [email protected] MINGW64 /etc$ vi vimrc 步骤二 在打开的vimrc文件开头添加以下代码: set nu set fencs=utf-8,gbk,utf-16,utf-32,ucs-bom 保存并退出vimrc编辑文档. 步骤三 1.退出git

idea中tomcat控制台输出中文乱码问题的解决

idea中tomcat控制台输出中文乱码问题的解决 每次用新的tomcat和idea都会遇到tomcat控制台中文乱码问题,故在此整理. 基本上都是需要修改tomcat的启动参数(如果本身idea编码都统一设置为utf-8了) 打开tomcat下的bin目录,找到catalina.bat文件 找到 JAVA_OPTS 参数,在其中加上 -Dfile.encoding=UTF-8(用的7.0.82版本的设置为UTF-8,8.0.20版本的需要设置为GBK,目前不知道原因,可能是组件的编码有变化)

解决docker容器中Centos7系统的中文乱码

解决docker容器中Centos7系统的中文乱码问题有如下两种方案: 第一种只能临时解决中文乱码: 在命令行中执行如下命令: $>localedef -i zh_CN -f UTF-8 zh_CN.UTF-8 $>yum -y install kde-l10n-Chinese && yum -y reinstall glibc-common $>localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 $>export LC_ALL=zh

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

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