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

PHP JSON 中文編碼處理:json_encode 與 json_decode 完美支持中文

     編輯:PHP 相關知識

PHP 5.2+ 內建 JSON 函數的中文限制

PHP 5.2 版本起引入 json_encode() 與 json_decode(),可實現陣列與 JSON 字串互轉。但預設情況下,中文字符會被轉為 Unicode 轉義序列(如 \u4e2d\u6587),導致可讀性差且傳輸體積增大。

支援中文的 Json_Helper 類實現

透過正則替換將 Unicode 轉義序列還原為 UTF-8 字符,可實現中文友好的 JSON 輸出:

<?php
class Json_Helper {
    /**
     * 生成支援中文的 JSON
     */
    public static function encode($data) {
        $json = json_encode($data);
        // 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);
    }

    /**
     * 解析 JSON(直接使用內建函數)
     */
    public static function decode($jsonStr) {
        return json_decode($jsonStr);
    }
}
?>

關鍵點說明

  • 正則模式:#\\\u([0-9a-f]{4})#ie 匹配 Unicode 轉義序列
  • iconv 轉換:將 UCS-2BE/LE 編碼的十六進制值轉為 UTF-8
  • pack('H4', ...):將十六進制字串轉為二進制數據
  • 系統差異:Linux 用 UCS-2BE,Windows 用 UCS-2LE(按字節序選擇)

使用示例

$arr = ['name' => '張三', 'city' => '北京'];
$json = Json_Helper::encode($arr);
// 輸出: {"name":"張三","city":"北京"} 而非 {"name":"\u5f20\u4e09","city":"\u5317\u4eac"}

$data = Json_Helper::decode($json);
// 正常解析為 PHP 陣列

注意事項

PHP 5.4+ 版本的 json_encode() 新增 JSON_UNESCAPED_UNICODE 選項,可直接輸出中文:json_encode($data, JSON_UNESCAPED_UNICODE)。若環境允許,建議優先使用內建選項,性能更優且無需額外處理。

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