溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PHP將數(shù)組編碼gbk和utf-8相互轉(zhuǎn)換的案例

發(fā)布時(shí)間:2020-10-26 10:16:45 來(lái)源:億速云 閱讀:282 作者:小新 欄目:編程語(yǔ)言

小編給大家分享一下PHP將數(shù)組編碼gbk和utf-8相互轉(zhuǎn)換的案例,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

一、利用var_export(), eval()方法

/**
 * 將含有GBK的中文數(shù)組轉(zhuǎn)為utf-8
 *
 * @param array  $arr          數(shù)組
 * @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;
  // 這里轉(zhuǎn)碼之后可以輸出json
  //  return json_encode($ret);
}

原理很簡(jiǎn)單 var_export設(shè)置第二個(gè)參數(shù)為true,返回?cái)?shù)組原型字符串,將字符串轉(zhuǎn)換為utf-8編碼,之后再用eval來(lái)執(zhí)行返回(類似匿名函數(shù)?),至此完美解決問(wèn)題。

eval() 函數(shù)小結(jié):

條件:eval() 函數(shù)把字符串按照 PHP 代碼來(lái)計(jì)算。該字符串必須是合法的 PHP 代碼,且必須以分號(hào)結(jié)尾。

如果沒(méi)有在代碼字符串中調(diào)用 return 語(yǔ)句,則返回 NULL。如果代碼中存在解析錯(cuò)誤,則 eval() 函數(shù)返回 false。

   $a ="hello";
   $res =  eval("return $a;");
   print_r($res);
    // 在賦值時(shí)必須用反斜杠對(duì)$標(biāo)示符進(jìn)行轉(zhuǎn)義
    eval("\$str = \"$str\";");
    echo $str;

二、利用遞歸將數(shù)組轉(zhuǎn)碼

/**
 * UTF-8編碼 GBK編碼相互轉(zhuǎn)換/(支持?jǐn)?shù)組)
 *
 * @param array  $str          字符串,支持?jǐn)?shù)組傳遞
 * @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;
    }
  }
}

看完了這篇文章,相信你對(duì)PHP將數(shù)組編碼gbk和utf-8相互轉(zhuǎn)換的案例有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI