资讯专栏INFORMATION COLUMN

PHP将数组编码gbk和utf-8相互转换

CodeSheep / 1689人阅读

摘要:在赋值时必须用反斜杠对标示符进行转义二利用递归将数组转码编码编码相互转换支持数组字符串,支持数组传递原字符串编码输出的字符串编码

这里有两种方法,都可以实现数组的编码相互转换。

一、利用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;
    }
  }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30387.html

相关文章

  • 前后端交互过程中的编码

    摘要:前后端交互过程中涉及的编码首先,浏览器的设置里有设置编码格式,一般设置为。按照设置的顺序检查检测文件的编码。 起因 最近在写PHP,本身对PHP不太熟练。然后遇到编码这个问题,困扰了大半天,索性,系统探索解决一番。 前后端交互过程中涉及的编码 Browser cilent: 首先,浏览器的设置里有设置编码格式,一般设置为UTF-8。 AJAX request: AJAX异步请求的过程...

    William_Sang 评论0 收藏0
  • 前后端交互过程中的编码

    摘要:前后端交互过程中涉及的编码首先,浏览器的设置里有设置编码格式,一般设置为。按照设置的顺序检查检测文件的编码。 起因 最近在写PHP,本身对PHP不太熟练。然后遇到编码这个问题,困扰了大半天,索性,系统探索解决一番。 前后端交互过程中涉及的编码 Browser cilent: 首先,浏览器的设置里有设置编码格式,一般设置为UTF-8。 AJAX request: AJAX异步请求的过程...

    wayneli 评论0 收藏0
  • 前后端交互过程中的编码

    摘要:前后端交互过程中涉及的编码首先,浏览器的设置里有设置编码格式,一般设置为。按照设置的顺序检查检测文件的编码。 起因 最近在写PHP,本身对PHP不太熟练。然后遇到编码这个问题,困扰了大半天,索性,系统探索解决一番。 前后端交互过程中涉及的编码 Browser cilent: 首先,浏览器的设置里有设置编码格式,一般设置为UTF-8。 AJAX request: AJAX异步请求的过程...

    explorer_ddf 评论0 收藏0
  • 我的第一个小程序(Discuz! + 微信小程序)

    摘要:微信小程序开发官方文档,正在开发的小程序的源码,都给了我不少启发到小程序上富文本的解析一个优秀的开源项目微信小程序富文本解析组件作用在于解析你论坛上的帖子内容,你论坛上加粗的文字,加了颜色的文字,图片等等,都可以原原本本的展示在小程序中。 关于这个小程序 Github : https://github.com/DowneyL/di...‘ 这个小程序是公司针对一个自家产品的需求,而这个...

    YacaToy 评论0 收藏0
  • PHP常用函数整理

    工作中常用的PHP函数,整理出来,以方便后边快速使用轮子。 1、字符串编码转换 /**  * 字符串编码转换  *   * @param  string  $str          待处理的字符  * @param  string  $in_charset   输入编码  * @param  string  $out_charset  输出编码  * @return string  */ fun...

    lijy91 评论0 收藏0

发表评论

0条评论

CodeSheep

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<