首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP json_encode 中文 Unicode 編碼問題完整解決方案

     編輯:PHP 綜合知識

使用 json_encode 輸出中文時,預設會將中文字元轉為 Unicode 逃逸序列(如 \u5723\u8bde...),導致前端難以閱讀與除錯。本文整理多種解決方案,適用不同 PHP 版本與作業系統環境。

方案一:preg_replace + iconv 轉碼(PHP 5.3 及以下)

<?php
function Notice() {
    include './include/conn.php';
    $sql_notice = mysql_query('SELECT * FROM gg_notice where enable = "1" limit 0,10');
    $notice = mysql_fetch_array($sql_notice, MYSQL_ASSOC);
    $str = json_encode($notice);
    // Linux 環境
    return preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2BE', 'UTF-8', pack('H4', '\\1'))", $str);
    // Windows 環境
    // return preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2LE', 'UTF-8', pack('H4', '\\1'))", $str);
}

方案二:封裝 Json_Helper 類別(支援編碼/解碼)

<?php
class Json_Helper {
    public static function encode($str) {
        $json = json_encode($str);
        // Linux
        return preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2BE', 'UTF-8', pack('H4', '\\1'))", $json);
        // Windows
        // return preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2LE', 'UTF-8', pack('H4', '\\1'))", $json);
    }
    public static function decode($str) {
        return json_decode($str);
    }
}

方案三:urlencode + urldecode 繞過編碼

<?php
$code = urldecode(json_encode(urlencode("廈門")));
// 輸出:廈門(而非 \u53a6\u95e8)

方案四:PHP 5.4+ 專屬 JSON_UNESCAPED_UNICODE 選項(推薦)

<?php
echo json_encode("廈門", JSON_UNESCAPED_UNICODE);
// 直接輸出:廈門

注意:json_encode / json_decode 僅支援 UTF-8 編碼。若資料為 GBK/Big5,需先轉碼。

附錄:GBK 轉 UTF-8 遞迴函式

<?php
function ct2($s) {
    if (is_numeric($s)) return intval($s);
    return iconv("GBK", "UTF-8", $s);
}

function icon_to_utf8($s) {
    if (is_array($s)) {
        foreach ($s as $key => $val) {
            $s[$key] = icon_to_utf8($val);
        }
    } else {
        $s = ct2($s);
    }
    return $s;
}

echo json_encode(icon_to_utf8("廈門"));

方案總結表

PHP 版本推薦方案優點缺點
5.3 及以下方案一/二(preg_replace)相容舊版本效能較差、需區分作業系統位元序
5.3 及以下方案三程式碼簡潔雙重編碼/解碼額外開銷
5.4+方案四原生支援、效能最佳、程式碼最簡潔需 PHP 5.4 以上環境
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved