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

一、利用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相互转换的内容到这就基本结束了,文章介绍的很详细,具有一定的参考价值,希望这篇文章对大家的学习和工作能带来一定的帮助。

(0)

相关推荐

  • php自动获取字符串编码函数mb_detect_encoding

    当在php中使用mb_detect_encoding函数进行编码识别时,很多人都碰到过识别编码有误的问题,例如对与GB2312和UTF- 8,或者UTF-8和GBK(这里主要是对于cp936的判断),网上说是由于字符短是,mb_detect_encoding会出现误判. 例如: 复制代码 代码如下: $encode = mb_detect_encoding($keytitle, array("ASCII",'UTF-8′,"GB2312′,"GBK",'B

  • php的urlencode()URL编码函数浅析

    URLEncode的方式一般有两种,一种是传统的基于GB2312的Encode(Baidu.Yisou等使用),另一种是基于UTF-8的Encode(Google.Yahoo等使用). 本工具分别实现两种方式的Encode与Decode: 中文 -> GB2312的Encode -> %D6%D0%CE%C4 中文 -> UTF-8的Encode -> %E4%B8%AD%E6%96%87 Html中的URLEncode: 编码为GB2312的html文件中:http://s.jb

  • PHP iconv 解决utf-8和gb2312编码转换问题

    终于皇天不负有心人,答案还是让我找到了. 网上的都是这样用的 复制代码 代码如下: $content = iconv("utf-8","gb2312",$content); 这样做其实也对着了,看着确实是把utf-8转化为gb2312了,但是实际运行的话,往往都是以失败告终的,原因呢? 原因实际上也很简单,因为任何的函数都是执行错误的时候,同时很不幸的是iconv();就很终于出现错误.现在给你正确的答案. 真正的答案是这样的 复制代码 代码如下: $content

  • PHP编码转换函数 自动转换字符集支持数组转换

    复制代码 代码如下: // 自动转换字符集 支持数组转换 function auto_charset($fContents, $from='gbk', $to='utf-8') { $from = strtoupper($from) == 'UTF8' ? 'utf-8' : $from; $to = strtoupper($to) == 'UTF8' ? 'utf-8' : $to; if (strtoupper($from) === strtoupper($to) || empty($fCo

  • php urlencode()与urldecode()函数字符编码原理详解

    其原理就是把中文字符转换为十六进制并按某种规则进行字符串组合,实现字符的编码与解编码,保证URL数据传递过程中字符的完整性和兼容性,主要讨论中文字符的编码情况. 一,FireFox浏览器编码中文字符 在Firefox浏览器下如果输入中文字符,将会自动实现URL编码,如下 按下Enter键前 按下Enter键后 二,urlencode()函数原理 urlencode()函数用于编码URL字符串,这里主要讨论中文字符的编码情况, 实例如下 复制代码 代码如下: echo urlencode('不要迷

  • PHP下编码转换函数mb_convert_encoding与iconv的使用说明

    不过英文一般不会存在编码问题,只有中文数据才会有这个问题.比如你用Zend Studio或Editplus写程序时,用的是gbk编码,如果数据需要入数据库,而数据库的编码为utf8时,这时就要把数据进行编码转换,不然进到数据库就会变成乱码. mb_convert_encoding的用法见官方: http://cn.php.net/manual/zh/function.mb-convert-encoding.php 做一个GBK To UTF-8 复制代码 代码如下: <?php header(&qu

  • PHP 页面编码声明方法详解(header或meta)

    php的header来定义一个php页面为utf编码或GBK编码 php页面为utf编码 header("Content-type: text/html; charset=utf-8"); php页面为gbk编码 header("Content-type: text/html; charset=gb2312"); php页面为big5编码 header("Content-type: text/html; charset=big5"); 通常情况以

  • php URL编码解码函数代码

    复制代码 代码如下: <?php $url = "http://www.jb51.net"; echo urlencode($url); //输出编码后的字符串 ?> 复制代码 代码如下: <?php $url = "http://www.jb51.net"; $newurl = urlencode($url); //首先对$url进行编码 echo urldecode($newurl); //输出解码后的字符串 ?>

  • php设置编码格式的方法

    a. 如果欲使用gb2312编码,那么php要输出头:header("Content-Type: text/html; charset=gb2312"),静态页面添加<meta http-equiv="Content-Type" content="text/html; charset=gb2312">,所有文件的编码格式为ANSI,可用记事本打开,另存为选择编码为ANSI,覆盖源文件. b. 如果欲使用utf-8编码,那么php要输出

  • php数组编码转换示例详解

    因为一些特殊字符的显示效果的原因不得不把习惯的utf-8工程改成了GBK,由于使用了ajax技术,又涉及到了老问题--编码转换.一些表单验证需要返回json数据,php的json_encode函数只支持utf-8编码,无奈只得iconv了,需要达到的效果是GBK数组转换成utf-8数组传给json_encode函数. 最开始的思路,将数组序列化后用iconv函数转换编码,之后再反序列化,代码如下: 复制代码 代码如下: unserialize(iconv('gbk','utf-8',serial

随机推荐