php实现转码的方式(支持数组类型转码)

由于将Array转换为json的json_encode()方法仅能将utf-8字符集进行转换,不是utf-8格式的中文字符会变成null,需要对Array中的字符进行统一转码,但是iconv()方法只能转换字符串类型编码,网上找到如下方法可以统一解决string类型和Array类型的转码问题

function auto_charset($fContents, $from=‘gbk‘, $to=‘utf-8‘) {
$from = strtoupper($from) == ‘UTF8‘ ? ‘utf-8‘ : $from;
$to = strtoupper($to) == ‘UTF8‘ ? ‘utf-8‘ : $to;
if (strtoupper($from) === strtoupper($to) || empty($fContents) || (is_scalar($fContents) && !is_string($fContents))) {
return $fContents;
}
if (is_string($fContents)) {
if (function_exists(‘mb_convert_encoding‘)) {
return mb_convert_encoding($fContents, $to, $from);
} else if (function_exists(‘iconv‘)) {
return iconv($from, $to, $fContents);
} else {
return $fContents;
}
} else if (is_array($fContents)) {
foreach ($fContents as $key => $val) {
$_key = auto_charset($key, $from, $to);
$fContents[$_key] = auto_charset($val, $from, $to);
if ($key != $_key)
unset($fContents[$key]);
}
return $fContents;
}
else {
return $fContents;
}
}

时间: 2024-08-28 20:04:14

php实现转码的方式(支持数组类型转码)的相关文章

MongoDB的使用学习之(七)MongoDB的聚合查询(两种方式)附项目源码

先来张在路上-- 此项目是用Maven创建的,没有使用Maven的,自己百度.谷歌去:直接用Junit测试就行,先执行里面的save方法,添加10000条测试数据提供各种聚合查询等. 废话不多说,上干货-- 一.MongoDB数据库的配置(mongodb.xml) 以下是我自己的配置,红色字体请改为自己本机的东东,你说不懂设置端口,不会创建数据库名称,不会配置用户名密码,那有请查阅本系列的第4节(MongoDB的使用学习之(四)权限设置--用户名.密码.端口==),你说懒得设置,那就@#¥%--

用最复杂的方式学会数组(Python实现动态数组)

Python序列类型 在本博客中,我们将学习探讨Python的各种"序列"类,内置的三大常用数据结构--列表类(list).元组类(tuple)和字符串类(str). 不知道你发现没有,这些类都有一个很明显的共性,都可以用来保存多个数据元素,最主要的功能是:每个类都支持下标(索引)访问该序列的元素,比如使用语法 Seq[i].其实上面每个类都是使用 数组 这种简单的数据结构表示. 但是熟悉Python的读者可能知道这3种数据结构又有一些不同:比如元组和字符串是不能修改的,列表可以修改.

10.2.3.1 以函数方式使用数组

我们先来看一个 F# 的例子,这是两个F# 库处理数组的重要的高阶函数,然后,用 C# 实现相同的功能.清单 10.12 的中脚本,先用随机数初始化一个数组,然后,计算出它们的平方. 清单 10.12 处理数组的函数式方法(F# Interactive) > let rnd = new System.Random();; val rnd : System.Random > let numbers = Array.init 5 (fun _-> rnd.Next(10));;   [1]

在ASP.NET MVC中以post方式传递数组参数的示例

最近在工作中用到了在ASP.NET MVC中以post方式传递数组参数的情况,记录下来,以供参考. 一.准备参数对象 在本例中,我会传递两个数组参数:一个字符串数组,一个自定义对象数组.这个自定义对象UserInfo定义如下: public class UserInfo { public int UserId { get; set; } public string UserName { get; set; } } 二.后台代码 后台Action代码如下: [HttpPost] public Ac

JDK源码重新编译——支持eclipse调试JDK源码--转载

最近在研究jdk源码,发现debug时无法查看源码里的变量值. 因为sun提供的jdk并不能查看运行中的局部变量,需要重新编译一下rt.jar. 下面这六步是编译jdk的具体步骤: Step 1:  Locate the JDK source First navigate to the JDK install directory, and locate the src.zip file. This file contains the JDK sources – and is absolutely

用几种不同的方式表示数组

#include<stdio.h> void main() { int a[]={0,1,2,3,4,5}; int i; int *p; p=a; for(i=0;i<6;i++) printf("a[%d]=%d\t",i,a[i]); printf("\n"); for(i=0;i<6;i++) printf("*(p+%d)=%d\t",i,*(p+i)); printf("\n"); for(

mysql的源码包方式安装(mysql5.5)

-------初写博客,希望在工作和日常中学习到的一些知识和经验与大家交流分享! 在Mysql5.5之后,使用源码包方式安装mysql就需要通过cmake方式进行编译了.以下内容介绍通过cmake方式安装mysql的步骤: 一:安装前准备. 1:检查系统中是否存在mysql用户与组. #grep "mysql" /etc/passwd 2:若存在,删除mysql用户与组. #userdel  -r mysql #groupdel  -r  mysql 3:创建mysql用户与组. #g

GO不支持数组通过函数参数更改,有点不一样

package main import "fmt" func modify(array [10]int) { array[0] = 10 fmt.Println("In modify(), array values: ", array) } func main() { array := [10]int{1, 2, 3, 4, 5} modify(array) fmt.Println("In main(), array values: ", arr

(转发)在ASP.NET MVC中以post方式传递数组参数的示例

最近在工作中用到了在ASP.NET MVC中以post方式传递数组参数的情况,记录下来,以供参考. 一.准备参数对象 在本例中,我会传递两个数组参数:一个字符串数组,一个自定义对象数组.这个自定义对象UserInfo定义如下: public class UserInfo { public int UserId { get; set; } public string UserName { get; set; } } 二.后台代码 后台Action代码如下: [HttpPost] public Ac