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的网址
Nov 25 PHP
php Xdebug 调试扩展的安装与使用.
Mar 13 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
Apr 20 PHP
php 错误处理经验分享
Oct 11 PHP
解决File size limit exceeded 错误的方法
Jun 14 PHP
PHP多进程编程实例
Oct 15 PHP
PHP的Socket通信之UDP通信实例
Jul 02 PHP
php简单实现批量上传图片的方法
May 09 PHP
php 三元运算符实例详细介绍
Dec 15 PHP
PHP 中使用explode()函数切割字符串为数组的示例
May 06 PHP
老生常谈PHP 文件写入和读取(必看篇)
May 22 PHP
Laravel框架源码解析之反射的使用详解
May 14 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中使用sockets:从新闻组中获取文章
2006/10/09 PHP
一周学会PHP(视频)Http下载
2006/12/12 PHP
php array_intersect比array_diff快(附详细的使用说明)
2011/07/03 PHP
MySQL 日期时间函数常用总结
2012/06/12 PHP
PHP中比较时间大小实例
2014/08/21 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
AJAX分页的代码(后台asp.net)
2011/02/14 Javascript
实现变速回到顶部的JavaScript代码
2011/05/09 Javascript
js图片滚动效果时间可随意设定当鼠标移上去时停止
2014/06/26 Javascript
js中函数声明与函数表达式
2015/06/03 Javascript
ClearTimeout消除闪动实例代码
2016/02/29 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
2017/04/10 Javascript
使用Node.js实现一个多人游戏服务器引擎
2019/03/13 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
Django模板继承 extend标签实例代码详解
2019/05/16 Javascript
JS使用H5实现图片预览功能
2019/09/30 Javascript
详解Python中的join()函数的用法
2015/04/07 Python
python 远程统计文件代码分享
2015/05/14 Python
Python编程之string相关操作实例详解
2017/07/22 Python
win10安装python3.6的常见问题
2020/07/01 Python
django 获取字段最大值,最新的记录操作
2020/08/09 Python
Under Armour安德玛法国官网:美国高端运动科技品牌
2018/06/29 全球购物
商场消防管理制度
2014/01/12 职场文书
向领导表决心的话
2014/03/11 职场文书
规划编制实施方案
2014/03/15 职场文书
《北大荒的秋天》教学反思
2014/04/14 职场文书
拾金不昧表扬信
2015/01/16 职场文书
2015年社会治安综合治理工作总结
2015/04/10 职场文书
高中数学教学反思范文
2016/02/18 职场文书
学前班教学反思
2016/02/24 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
2021/06/08 Python
一次SQL查询优化原理分析(900W+数据从17s到300ms)
2022/06/10 SQL Server