亂碼問題核心在於編碼不一致。必須確保四者編碼完全一致:
<meta charset>)建庫時指定編碼(如 utf8mb4_unicode_ci 或 gbk_chinese_ci),建表、建欄位、插入資料時不要單獨指定編碼,讓其自動繼承資料庫編碼。連線時執行:
mysql_query('SET NAMES utf8'); // 或 gbk,依實際編碼而定
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta charset="utf-8">
使用 EditPlus、VS Code、PhpStorm 等編輯器另存新檔時選擇對應編碼:
gbk → 檔案存為 ANSI(Windows 下 ANSI 即 GBK)utf-8 → 檔案存為 UTF-8 無 BOMJS/Flash 傳遞資料通常為 UTF-8。若後端為 GBK,需轉碼後寫入資料庫:
iconv('utf-8', 'gbk', $content);
<?php
header('Content-type: text/html; charset=utf-8');
// 必須在任何輸出前呼叫
?>
| 特性 | header() | meta 標籤 |
|---|---|---|
| 運作層級 | HTTP 回應標頭 | HTML 文件內容 |
| 優先權 | 較高(瀏覽器優先參考) | 較低 |
| 功能範圍 | 可設定快取、重導向、Cookie 等 | 僅宣告字元編碼 |
| 適用場景 | API、非 HTML 輸出、需精確控制 | 一般 HTML 頁面 |
最佳實踐:同時使用
header()(PHP 程式最前端)與<meta charset>(HTML head 區塊)雙重保險,並確保檔案儲存編碼一致。