Php中对一个字符串进行编码格式转换很简单直接使用iconv()函数就可以 比如:iconv(“utf-8”,”gbk”,”我的祖国”)把字符串”我的祖国”的编码格式由utf-8转换成gbk格式,可是如果要对一个数组中的值进行转换如何操作?尤其是多维数组。在php的函数库中没有直接对数组内容进行编码转换的函数,只能自己定义。
对多维数组进行编码转换,在操作中要使用到递归
实例:
下面定义的数组中键和值中都有汉字,是为了在测试中让自定义的转码函数m_iconv更加健全$dd = array(
0,
1,
"d" => "e问问",
"q"=>"444",
"f刚刚"=>array(
3,
4,
"t" => "5方法",
"我"=> "6搜索"
)
);
$d = m_iconv('utf-8','gbk',$dd);
print_r($d);
自己定义数组内容转码函数/**
* php转码函数
* $in_charset 此刻编码
* $out_charset 转码后,输出的编码
* $datas 要转码的数据
*/
function m_iconv($in_charset,$out_charset,$datas){
if(is_array($datas)){ //如果数据为数组
foreach($datas as $k=>$v){
if(is_array($v)){ //如果数据为多维数组,进行下面的递归调用m_iconv()函数自身
$k = iconv($in_charset,$out_charset,$k); //多维数组的键进行转码,这里可以把键设置为汉字测试看看
$ml[$k] = m_iconv($in_charset,$out_charset,$v);
}elseif(is_string($k) || is_string($v)){ //如果是一维数组判断键和值是否为字符串
if(is_string($k)){
$k = iconv($in_charset,$out_charset,$k);
}
if(is_string($v)){
$v = iconv($in_charset,$out_charset,$v);
}
$ml[$k] = $v;
}else{
$ml[$k] = $v; //一维数组键和值都为数组
}
}
}elseif(is_string($datas)){ //如果数据为字符串
$ml = iconv($in_charset,$out_charset,$datas);
}else{
$ml = $datas; //如果数据为数值
}
return $ml;
}