PHP数组编码gbk与utf8互相转换的两种方法
一、利用var_export(),eval()方法
/**
*将含有GBK的中文数组转为utf-8
*
*@paramarray$arr数组
*@paramstring$in_charset原字符串编码
*@paramstring$out_charset输出的字符串编码
*@returnarray
*/
functionarray_iconv($arr,$in_charset="gbk",$out_charset="utf-8")
{
$ret=eval('return'.iconv($in_charset,$out_charset,var_export($arr,true).';'));
return$ret;
//这里转码之后可以输出json
//returnjson_encode($ret);
}
原理很简单var_export设置第二个参数为true,返回数组原型字符串,将字符串转换为utf-8编码,之后再用eval来执行返回(类似匿名函数?),至此完美解决问题。
eval()函数小结:
条件:eval()函数把字符串按照PHP代码来计算。该字符串必须是合法的PHP代码,且必须以分号结尾。
如果没有在代码字符串中调用return语句,则返回NULL。如果代码中存在解析错误,则eval()函数返回false。
$a="hello";
$res=eval("return$a;");
print_r($res);
//在赋值时必须用反斜杠对$标示符进行转义
eval("\$str=\"$str\";");
echo$str;
二、利用递归将数组转码
/**
*UTF-8编码GBK编码相互转换/(支持数组)
*
*@paramarray$str字符串,支持数组传递
*@paramstring$in_charset原字符串编码
*@paramstring$out_charset输出的字符串编码
*@returnarray
*/
functionarray_iconv($str,$in_charset="gbk",$out_charset="utf-8")
{
if(is_array($str))
{
foreach($stras$k=>$v)
{
$str[$k]=array_iconv($v);
}
return$str;
}
else
{
if(is_string($str))
{
//returniconv('UTF-8','GBK//IGNORE',$str);
returnmb_convert_encoding($str,$out_charset,$in_charset);
}
else
{
return$str;
}
}
}
总结
PHP将数组编码gbk和utf-8相互转换的内容到这就基本结束了,文章介绍的很详细,具有一定的参考价值,希望这篇文章对大家的学习和工作能带来一定的帮助。