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 相关文章推荐
2.PHP入门
Oct 09 PHP
初探PHP5
Oct 09 PHP
mysql 中InnoDB和MyISAM的区别分析小结
Apr 15 PHP
php 方便水印和缩略图的图形类
May 21 PHP
PHP之COOKIE支持详解
Sep 20 PHP
PHP执行zip与rar解压缩方法实现代码
Dec 05 PHP
php常用Output和ptions/Info函数集介绍
Jun 19 PHP
怎么在Windows系统中搭建php环境
Aug 31 PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
Oct 17 PHP
浅谈PHP中Stream(流)
Jun 08 PHP
Laravel中的Blade模板引擎示例详解
Oct 10 PHP
laravel Model 执行事务的实现
Oct 10 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
最贵的咖啡是怎么产生的,它的风味怎么样?
2021/03/04 新手入门
解析PHP处理换行符的问题 \r\n
2013/06/13 PHP
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
PHP中抽象类、接口的区别与选择分析
2016/03/29 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
JavaScript表单常用验证集合
2008/01/16 Javascript
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
js propertychange和oninput事件
2014/09/28 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
jQuery实现本地预览上传图片功能
2016/01/08 Javascript
适用于javascript开发者的Processing.js入门教程
2016/02/24 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
微信小程序 本地存储及登录页面处理实例详解
2017/01/11 Javascript
详解VUE 定义全局变量的几种实现方式
2017/06/01 Javascript
浅谈vue,angular,react数据双向绑定原理分析
2017/11/28 Javascript
js判断节假日实例代码
2017/12/27 Javascript
Vue自定义指令实现checkbox全选功能的方法
2018/02/28 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
Python使用django框架实现多人在线匿名聊天的小程序
2017/11/29 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
PyQt5 QTable插入图片并动态更新的实例
2019/06/18 Python
python函数map()和partial()的知识点总结
2020/05/26 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
2020/06/12 Python
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
2019/09/09 HTML / CSS
来自圣地亚哥的实惠太阳镜:Knockaround
2018/08/27 全球购物
马来西亚排名第一的宠物用品店:Pets Wonderland
2020/04/16 全球购物
大学生创业感言
2014/01/25 职场文书
幼儿园消防演练方案
2014/02/13 职场文书
革命先烈的英雄事迹材料
2014/02/15 职场文书
《海伦?凯勒》教学反思
2014/04/17 职场文书
集体生日活动方案
2014/08/18 职场文书
2014年司法局工作总结
2014/12/11 职场文书
2015年酒店工作总结
2015/04/28 职场文书
论语读书笔记
2015/06/26 职场文书
html5实现点击弹出图片功能
2021/07/16 HTML / CSS
MySQL之MyISAM存储引擎的非聚簇索引详解
2022/03/03 MySQL