PHP数组编码gbk与utf8互相转换的两种方法

5年以前  |  阅读数:925 次  |  编程语言:PHP 

一、利用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将数组编码gbk和utf-8相互转换的内容到这就基本结束了,文章介绍的很详细,具有一定的参考价值,希望这篇文章对大家的学习和工作能带来一定的帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例