PHP将数组编码gbk和utf-8相互转换

藏色散人
发布: 2019-10-25 13:33:31
转载
3724人浏览过

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

一、利用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 代码,且必须以分号结尾。

立即学习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中文网

以上就是PHP将数组编码gbk和utf-8相互转换的详细内容,更多请关注php中文网其它相关文章!

豆包AI编程
豆包AI编程

智能代码生成与优化,高效提升开发速度与质量!

下载
相关标签:
来源:segmentfault网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号