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

PHP JSON 中文編碼亂碼徹底解決方案

     編輯:PHP 相關知識

問題根源

PHP 5.3 之前 json_encode 會將中文字符轉為 Unicode 轉義序列 (如 \u4e2d\u6587),導致前端直接 alert 顯示亂碼,且傳輸體積增大。

歷史版本兼容方案 (PHP 5.3-5.5)

<?php
$json = array(
    array('id' => 13, 'name' => '乒乓球'),
    array('id' => 17, 'name' => '籃球')
);

$code = json_encode($json);
// 正則替換 Unicode 轉義為 UTF-8 字符
echo preg_replace("#\\\\u([0-9a-f]{4})#ie", "iconv('UCS-2BE', 'UTF-8', pack('H4', '\\1'))", $code);
?>

現代最佳實踐 (PHP 5.4+)

直接使用 JSON_UNESCAPED_UNICODE 選項,無需任何後處理:

<?php
$json = array(
    array('id' => 13, 'name' => '乒乓球'),
    array('id' => 17, 'name' => '籃球')
);

// PHP 5.4+ 直接輸出可讀中文
echo json_encode($json, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
// 輸出: [{"id":13,"name":"乒乓球"},{"id":17,"name":"籃球"}]
?>

前端接收示例

<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
<script>
$.getJSON("json.php", function(data) {
    $.each(data, function(i, item) {
        console.log(item.name); // 正常顯示中文
        $('#list').append('<li>' + item.name + '</li>');
    });
});
</script>
<ul id="list"></ul>

常見坑點提醒

  • 文件編碼必須為 UTF-8 無 BOM:編輯器保存時確認
  • 數據庫連接字符集:PDO 設置 SET NAMES utf8mb4,mysqli set_charset('utf8mb4')
  • HTTP 響應頭:header('Content-Type: application/json; charset=utf-8');
  • PHP 7.1+:新增 JSON_UNESCAPED_LINE_TERMINATORS 保留換行符

總結

升級 PHP 5.4+ 並使用 JSON_UNESCAPED_UNICODE 是最簡潔、高效、標準的解決方案。舊版本環境可用正則替換過渡,但強烈建議升級運行環境。

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