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


Posted in PHP onSeptember 01, 2016

一、利用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 相关文章推荐
php模块memcache和memcached区别分析
Jun 14 PHP
php 日期和时间的处理-郑阿奇(续)
Jul 04 PHP
PHP的SQL注入过程分析
Jan 06 PHP
MySQL 日期时间函数常用总结
Jun 12 PHP
解析php中memcache的应用
Jun 18 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
Aug 07 PHP
改写函数实现PHP二维/三维数组转字符串
Sep 13 PHP
PHP将XML转数组过程详解
Nov 13 PHP
服务器上配置PHP运行环境教程
Feb 12 PHP
详解PHP实现定时任务的五种方法
Jul 25 PHP
PHP将URL转换成短网址的算法分享
Sep 13 PHP
Zend Framework实现自定义过滤器的方法
Dec 09 PHP
Yii2框架数据库简单的增删改查语法小结
Aug 31 #PHP
深入浅析Yii admin的权限控制
Aug 31 #PHP
php解决和避免form表单重复提交的几种方法
Aug 31 #PHP
PHP Callable强制指定回调类型的方法
Aug 30 #PHP
thinkphp配置文件路径的实现方法
Aug 30 #PHP
总结PHP删除字符串最后一个字符的三种方法
Aug 30 #PHP
功能强大的php文件上传类
Aug 29 #PHP
You might like
PHP模拟SQL Server的两个日期处理函数
2006/10/09 PHP
php Smarty 字符比较代码
2011/02/27 PHP
Zend studio文件注释模板设置方法
2013/09/29 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
2017/06/09 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
直接生成打开窗口代码,不必下载
2008/05/14 Javascript
javascript 图片裁剪技巧解读
2012/11/15 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
详解javascript实现瀑布流绝对式布局
2016/01/29 Javascript
JavaScript中的this引用(推荐)
2016/08/05 Javascript
详解Javascript中prototype属性(推荐)
2016/09/03 Javascript
详解Nodejs之静态资源处理
2017/06/05 NodeJs
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
详解Angular6学习笔记之主从组件
2018/09/05 Javascript
webpack 从指定入口文件中提取公共文件的方法
2018/11/13 Javascript
Vue.use()在new Vue() 之前使用的原因浅析
2019/08/26 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
vue移动端弹起蒙层滑动禁止底部滑动操作
2020/07/22 Javascript
详解nginx配置vue h5 history去除#号
2020/11/09 Javascript
python绘图库Matplotlib的安装
2014/07/03 Python
django在接受post请求时显示403forbidden实例解析
2018/01/25 Python
详解pandas的外部数据导入与常用方法
2019/05/01 Python
python3中sys.argv的实例用法
2020/04/24 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
python使用dlib进行人脸检测和关键点的示例
2020/12/05 Python
python 基于selectors库实现文件上传与下载
2020/12/31 Python
idealfit英国:世界领先的女性健身用品和运动衣物品牌
2017/11/25 全球购物
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
简历中自我评价分享
2013/10/09 职场文书
离婚协议书范文
2015/01/26 职场文书
作息时间调整通知
2015/04/22 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书
讲解Python实例练习逆序输出字符串
2022/05/06 Python
SQL Server中搜索特定的对象
2022/05/25 SQL Server