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模板之Phpbean的目录结构
Jan 10 PHP
php简单静态页生成过程
Mar 27 PHP
PHP 危险函数解释 分析
Apr 22 PHP
基于PHP Web开发MVC框架的Smarty使用说明
Apr 19 PHP
php上传图片之时间戳命名(保存路径)
Aug 15 PHP
php生成随机颜色的方法
Nov 13 PHP
PHP制作百度词典查词采集器
Jan 29 PHP
php实现TCP端口检测的方法
Apr 01 PHP
php创建无限级树型菜单
Nov 05 PHP
Laravel 批量更新多条数据的示例
Nov 27 PHP
php实现的rc4加密解密类定义与用法示例
Aug 16 PHP
laravel框架中间件简单使用方法示例
Jan 25 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使用fopen创建utf8编码文件的方法
2014/10/31 PHP
php cli配置文件问题分析
2015/10/15 PHP
PHP匿名函数和use子句用法实例
2016/03/16 PHP
PHP封装函数实现生成随机的字符串验证码
2017/01/24 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
2018/05/21 PHP
php curl优化下载微信头像的方法总结
2018/09/07 PHP
javascript 全选与全取消功能的实现代码
2012/12/23 Javascript
浅析Node.js查找字符串功能
2014/09/03 Javascript
NodeJS制作爬虫全过程
2014/12/22 NodeJs
javascript操作Cookie(设置、读取、删除)方法详解
2015/03/18 Javascript
基于javascript实现随机颜色变化效果
2016/01/14 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
2016/08/05 Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
2016/09/24 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
2017/11/15 Javascript
小程序实现层叠卡片滑动效果
2019/08/26 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
Windows下安装python2.7及科学计算套装
2015/03/05 Python
Python的Flask框架应用调用Redis队列数据的方法
2016/06/06 Python
python中的计时器timeit的使用方法
2017/10/20 Python
python科学计算之scipy——optimize用法
2019/11/25 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
使用Python构造hive insert语句说明
2020/06/06 Python
CSS3弹性盒模型flex box快速入门心得(必看篇)
2016/05/24 HTML / CSS
Nili Lotan官网:Nili Lotan同名品牌
2018/01/07 全球购物
Speedo速比涛德国官方网站:世界领先的泳装品牌
2019/08/26 全球购物
教育科研先进个人材料
2014/01/26 职场文书
社区班子对照检查材料
2014/08/27 职场文书
全国法院系统开展党的群众路线教育实践活动综述(全文)
2014/10/25 职场文书
2014年人事行政工作总结
2014/12/03 职场文书
2016教师廉洁从教心得体会
2016/01/13 职场文书
导游词之茶卡盐湖
2019/11/26 职场文书
python 命令行传参方法总结
2021/05/25 Python
SQL实现LeetCode(197.上升温度)
2021/08/07 MySQL
Qt自定义Plot实现曲线绘制的详细过程
2021/11/02 Python