公司的老项目都是gbk编码的,但是新项目都是utf-8编码的。而项目之间交互涉及汉子难免就需要转码,普通字符串可以之间利用iconv来转码,数组就比较麻烦。以前的同事也写过数组转码的函数。
如下:
```
/**
* 对所有数据类型进行转码
*
* @param mixed value
* 待转码变量
* @param string inCharset
* 原编码, gbk
* @param string outCharset
* 目标编码, utf-8
* @return mixed 转码后的数据
*/
function iconvArray(value, inCharset = "gbk", outCharset = "utf-8")
{
if (is_array ( value ))
{
ret = array ();
foreach ( value as key => one )
{
ret [key] = iconv ( inCharset, outCharset, one );
;
}
}
else
{
ret = iconv ( inCharset, outCharset, value );
}
return ret;
}
```
很明显,以上函数只支持一维数组转码,对于多维就无能为力了。
以下是自己写的转码函数,不管是字符串,还是一维、多维数组都可使用。
```
/**
* 编码转换(可以是多维数组)
* @author shim
* @param data 待转码变量
* @param in_charset 原编码, gbk
* @param out_charset 目标编码, utf-8
* @return array 转码后的数据
*/
function iconvArrayA(data, in_charset = 'gbk', out_charset = 'utf-8')
{
if (is_array(data))
{
foreach (data as key => val)
{
dataA[key] = iconvArrayA(val, in_charset, out_charset);
}
return dataA;
}
else
{
return iconv(in_charset, out_charset, data);
}
}
```