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

json_encode 中文 Unicode 轉義問題的三種解決方案

     編輯:PHP 相關知識

json_encode 預設將中文編碼為 \uXXXX,雖標準但增加傳輸體積。本文提供三種輸出原始中文的方案,並解決非 UTF-8 編碼導致 null 的問題。

方案一:urlencode + json_encode + urldecode(推薦)

$array = ['test' => urlencode("我是測試")];
$json = json_encode($array);
echo urldecode($json); // {"test":"我是測試"}
  • 原理:urlencode 將中文轉為 %XX%XX,json_encode 不轉義 ASCII,最後 urldecode 還原。
  • 優點:節省帶寬,前端無需額外解碼,直接可讀。
  • 前提:PHP 文件與頁面均為 UTF-8,否則會亂碼。

方案二:PHP 5.4+ 使用 JSON_UNESCAPED_UNICODE 選項

echo json_encode($array, JSON_UNESCAPED_UNICODE); // 直接輸出中文
  • 最簡潔,需 PHP ≥ 5.4。

方案三:自定義編碼函數(兼容舊版本)

function my_json_encode($data) {
    if (is_array($data)) {
        foreach ($data as $k => $v) $data[$k] = my_json_encode($v);
        return $data;
    } elseif (is_string($data)) {
        return urlencode($data);
    }
    return $data;
}
echo urldecode(json_encode(my_json_encode($array)));

json_encode 返回 null 的原因與修復

當輸入字符串非 UTF-8(如抓取 GBK 頁面)時,json_encode 會返回 null。解決:

$utf8_str = iconv('GBK', 'UTF-8', $original_str);
echo json_encode($utf8_str);

補充:JS/CSS 壓縮工具 TBCompressor 的中文處理

修改 cmd 移除 native2ascii 步驟,並設置 charset=UTF-8,可避免中文轉 Unicode 導致體積膨脹,且無需 JDK 僅需 JRE 即可運行。

選擇建議:現代項目首選 JSON_UNESCAPED_UNICODE;舊版本或需兼容性時用方案一。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved