这里有两种方法,都可以实现数组的编码相互转换。

一、利用var_export(), eval()方法

/** * 将含有GBK的中文数组转为utf-8 * * @param array  $arr          数组 * @param string $in_charset   原字符串编码 * @param string $out_charset  输出的字符串编码 * @return array */function array_iconv($arr, $in_charset="gbk", $out_charset="utf-8"){  $ret = eval('return '.iconv($in_charset,$out_charset,var_export($arr,true).';'));  return $ret;  // 这里转码之后可以输出json  //  return json_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编码相互转换/(支持数组) * * @param array  $str          字符串,支持数组传递 * @param string $in_charset   原字符串编码 * @param string $out_charset  输出的字符串编码 * @return array */function array_iconv($str, $in_charset="gbk", $out_charset="utf-8"){  if(is_array($str))  {    foreach($str as $k => $v)    {      $str[$k] = array_iconv($v);    }    return $str;  }  else  {    if(is_string($str))    {      // return iconv('UTF-8', 'GBK//IGNORE', $str);      return mb_convert_encoding($str, $out_charset, $in_charset);    }    else    {      return $str;    }  }}

更多PHP相关知识,请访问PHP中文网!

更多相关文章

  1. PHP数组具有的特性有哪些
  2. php中如何在数组指定位置插入数据单元
  3. php获取数组中最后一个元素的方法
  4. php如何删除字符串中的重复数字或字符
  5. 用php输出一个数组中的偶数或奇数的方法
  6. PHP-xml & jsonp转数组的方法
  7. PHP获取字符串中字符、字符串第n次出现的位置
  8. PHP中将字符串全部转为小写或大写的方法
  9. PHP随机生成不重复的8位卡号(数字)和卡密(字符串)

随机推荐

  1. 疯狂了,Archlinux+Openbox+Rox+fbpanel我
  2. Linux 常用命令使用英文全称
  3. 【Azure】两台Linux虚拟机挂载共享文件
  4. Linux QT5.2下编译MySQL5.6.7驱动
  5. Linux使用wget下载整站
  6. Linux下SVN服务器安装配置及客户端安装说
  7. Ubuntu(16.04.2)学习笔记(一)如何解决dpkg:
  8. 使用Bash编写Linux Shell脚本-9. 参数和
  9. REDIS从LINUX文件写入批量数据
  10. Android usb client mass-storage 多存储