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

解決 PHP json_encode 中文亂碼、多維陣列、換行與中文鍵名問題

     編輯:PHP 綜合知識

問題場景

  • json_encode 後中文變成不可讀的 Unicode 編碼(如 \u4e2d\u6587)
  • 多維陣列中文亂碼
  • 陣列包含換行符導致 JSON 錯誤
  • 陣列鍵名為中文時編碼異常

通用解決方案:URL 編碼包裝法

<?php
function _encode($arr) {
    $na = array();
    foreach ($arr as $k => $value) {
        $na[_urlencode($k)] = _urlencode($value);
    }
    // json_encode 後解碼,並處理換行符
    return addcslashes(urldecode(json_encode($na)), "\r\n");
}

function _urlencode($elem) {
    if (is_array($elem)) {
        foreach ($elem as $k => $v) {
            $na[_urlencode($k)] = _urlencode($v);
        }
        return $na;
    }
    return urlencode($elem);
}
?>

使用範例

<?php
$data = array(
    '姓名' => '王小明',
    '備註' => "第一行\n第二行",
    '子資料' => array(
        '城市' => '台北',
        '年齡' => 25
    )
);

echo _encode($data);
// 輸出正常中文 JSON,換行符已處理
?>

原理解析

  1. 遞迴對所有鍵名與值執行 urlencode(),將中文、換行等特殊字元轉為安全的 ASCII 字串
  2. 呼叫 json_encode() 產生標準 JSON(此時全為 ASCII,無亂碼)
  3. 用 urldecode() 還原中文字元
  4. 用 addcslashes() 處理換行符 \r\n 防止 JSON 解析錯誤

PHP 5.4+ 內建選項(較簡單)

<?php
// JSON_UNESCAPED_UNICODE:不轉義 Unicode(直接輸出中文)
// JSON_UNESCAPED_SLASHES:不轉義斜線
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
?>

建議:PHP 5.4 以上環境優先使用內建常數;舊版環境使用上述包裝函數。

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