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中文字符截取防乱码
Mar 28 PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
Jan 03 PHP
php 搜索框提示(自动完成)实例代码
Feb 05 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
Dec 01 PHP
两种php给图片加水印的实现代码
Apr 18 PHP
详解PHP中array_rand函数的使用方法
Sep 11 PHP
PHP实现正则表达式分组捕获操作示例
Feb 03 PHP
PHP实现APP微信支付的实例讲解
Feb 10 PHP
CI框架(CodeIgniter)实现的数据库增删改查操作总结
May 23 PHP
php命令行写shell实例详解
Jul 19 PHP
php常用日期时间函数实例小结
Jul 04 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 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 文件上传进度条的两种实现方法的代码
2007/11/25 PHP
yii2 开发api接口时优雅的处理全局异常的方法
2019/05/14 PHP
css图片自适应大小
2007/11/28 Javascript
js 判断一个元素是否在页面中存在
2012/12/27 Javascript
jquery常用操作小结
2014/07/21 Javascript
javascript控制层显示或隐藏的方法
2015/07/22 Javascript
javascript实现PC网页里的拖拽效果
2016/03/14 Javascript
实例讲解JavaScript的Backbone.js框架中的View视图
2016/05/05 Javascript
AngularJS基础 ng-dblclick 指令用法
2016/08/01 Javascript
基于AngularJS前端云组件最佳实践
2016/10/20 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
2016/12/05 Javascript
JS实现移动端按首字母检索城市列表附源码下载
2017/07/05 Javascript
详解vue-cli + webpack 多页面实例配置优化方法
2017/07/13 Javascript
weex里Vuex state使用storage持久化详解
2017/09/09 Javascript
NodeJs实现定时任务的示例代码
2017/12/05 NodeJs
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
2017/12/18 jQuery
JavaScript 有用的代码片段和 trick
2018/02/22 Javascript
JavaScript实现简单音乐播放器
2020/04/17 Javascript
bootstrap table实现横向合并与纵向合并
2019/07/18 Javascript
vue中监听返回键问题
2019/08/28 Javascript
python中的格式化输出用法总结
2016/07/28 Python
python中模块查找的原理与方法详解
2017/08/11 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
2019/07/22 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
2019/11/15 Python
Python龙贝格法求积分实例
2020/02/29 Python
iPhoneX安全区域(Safe Area)底部小黑条在微信小程序和H5的屏幕适配
2020/04/08 HTML / CSS
美国网上眼镜商城:Zenni Optical
2016/11/20 全球购物
比利时买床:Beter Bed
2017/12/06 全球购物
车间班组长的职责
2013/12/13 职场文书
关于运动会的稿件
2014/02/02 职场文书
产品陈列协议书(标准版)
2014/09/17 职场文书
北京故宫的导游词
2015/01/31 职场文书
css 中多种边框的实现小窍门
2021/04/07 HTML / CSS
JavaScript模拟实现网易云轮播效果
2022/04/04 Javascript
MySQL创建管理HASH分区
2022/04/13 MySQL
教你如何用cmd快速登录服务器
2022/06/10 Servers