PHP將陣列編碼gbk和utf-8相互轉換

2020-07-16 10:06:06
這裡有兩種方法,都可以實現陣列的編碼相互轉換。

一、利用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相關知識,請存取PHP中文網

以上就是PHP將陣列編碼gbk和utf-8相互轉換的詳細內容,更多請關注TW511.COM其它相關文章!