亂碼產生的七大環節
- HTML 頁面編碼聲明:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">,必須與數據庫、連接編碼一致。
- 文件保存編碼:使用 EditPlus、Notepad++、VS Code 等編輯器「另存為」選擇 UTF-8(無 BOM),避免 ANSI/GB2318 混雜。
- 數據庫整理編碼:phpMyAdmin 中選擇數據庫 → 操作 → 整理,設為 utf8_general_ci 或 utf8mb4_general_ci。
- 表整理編碼:同樣在表級別設置整理規則。
- 字段整理編碼:建表時指定含漢字字段的整理編碼。
- 連接層設置字符集:
mysql_select_db() 後緊跟 mysql_query("SET NAMES utf8")(或 mysqli_set_charset())。
- 數據導出入編碼:本地導出 SQL 時勾選正確編碼,導入線上同樣指定編碼,否則線上出現亂碼。
核心原則
全鏈路編碼統一:瀏覽器 → Web Server → PHP 腳本 → MySQL 連接 → 數據庫/表/字段,每一環節編碼必須一致(推薦全鏈路 UTF-8/utf8mb4)。
排查步驟
- 確認頁面 Meta 與 HTTP Header
Content-Type 一致。
- 檢查所有 PHP 文件保存編碼。
- 驗證數據庫、表、字段整理編碼。
- 確認連接代碼執行
SET NAMES。
- 排查導入導出環節編碼設置。
總結
亂碼本質是編碼不一致,技術難度不大,關鍵在於「細心」逐項核對。建立項目編碼規範文檔,新成員入項必讀,可從源頭杜絕此類問題。