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

PHP 輸出中文亂碼完整解決方案:Header 編碼設定詳解

     編輯:PHP 相關知識

問題背景

PHP 開發中最常見的問題之一就是網頁顯示亂碼,無論是直接輸出的 HTML 內容,還是 JavaScript alert() 彈出的訊息框,只要瀏覽器解碼方式與伺服器實際編碼不一致,就會出現亂碼。雖然使用者可手動切換瀏覽器編碼,但這嚴重損害使用者體驗,也非專業開發應有的態度。

核心原因

HTTP 回應缺少正確的 Content-Type 標頭,導致瀏覽器無法得知正確編碼,只能猜測或使用預設編碼(如 Big5、GB2312),與實際 UTF-8 內容不符而產生亂碼。

標準解決方案

在 PHP 檔案的最開頭(任何輸出之前)加入以下標頭宣告:

<?php
header("Content-type: text/html; charset=UTF-8");
// 後續業務邏輯...
?>

關鍵注意事項

  • 必須在輸出前呼叫:任何 echo、HTML 空白、BOM 簽名都會導致標頭發送失敗
  • 編碼需一致:若專案使用 Big5,請改為 charset=Big5;現代專案建議統一 UTF-8
  • 檔案儲存編碼:PHP 檔案本身必須以「UTF-8 無 BOM」格式儲存(可用 VS Code、Notepad++、PhpStorm 等編輯器設定)

進階:多層面編碼一致性檢查清單

層面建議設定檢查方式
PHP 輸出標頭header("Content-Type: text/html; charset=UTF-8")瀏覽器開發工具 Network → Response Headers
HTML meta 標籤<meta charset="UTF-8"> (HTML5)View Page Source 檢視原始碼
資料庫連線PDO: charset=utf8mb4 / mysqli: set_charset('utf8mb4')執行 SHOW VARIABLES LIKE 'character_set%'
資料表/欄位CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ciSHOW CREATE TABLE table_name
PHP 檔案編碼UTF-8 無 BOM編輯器右下角或「另存新檔」編碼選項
Web 伺服器Nginx: charset utf-8; / Apache: AddDefaultCharset UTF-8curl -I 檢查回應標頭

常見誤區

  1. 只加 HTML meta 不加 PHP header:瀏覽器優先讀取 HTTP 標頭,meta 標籤優先級較低
  2. 使用 utf8 而非 utf8mb4:MySQL 的 utf8 只支援 3 位元組字元,無法儲存 Emoji 等 4 位元組字元,必須用 utf8mb4
  3. 檔案含 BOM 簽名:UTF-8 with BOM 會在輸出最前面產生隱形字元,導致 header() 失效或 JSON 解析錯誤

除錯技巧

<?php
// 快速檢查目前輸出編碼
header("Content-Type: text/plain; charset=UTF-8");
echo "當前輸出編碼測試:中文測試";
// 若瀏覽器正常顯示中文,說明 header 生效
?>

總結

解決 PHP 亂碼的核心在於「統一編碼」:PHP header()、HTML <meta charset>、資料庫連線、檔案儲存、Web 伺服器設定,五個環節全部設為 UTF-8(推薦 utf8mb4)。養成在每個 PHP 入口檔案開頭寫入 header 的習慣,能從根源杜絕 90% 的亂碼問題。

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