網頁亂碼本質上是「編碼宣告與實際內容編碼不一致」導致瀏覽器以錯誤字元集解析。解決關鍵在於統一:檔案儲存編碼、HTTP Header、HTML Meta 標籤、資料庫連線編碼四者一致。
header("Content-Type: text/html; charset=utf-8");AddDefaultCharset utf-8 於 httpd.conf<meta http-equiv="Content-Type" content="text/html; charset=utf-8">default_charset = "utf-8"現代 Web 開發建議全端採用 UTF-8(資料庫用 utf8mb4),避免 GB2312/Big5 相容性問題。
<?php
header("Content-Type: text/html; charset=utf-8");
// 其餘程式碼...
?>
$pdo = new PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", $user, $pass);
// 或 mysqli
mysqli_set_charset($link, "utf8mb4");
// 舊版 mysql_query("SET NAMES utf8mb4");
使用 VS Code、Notepad++、EditPlus 等編輯器,儲存為「UTF-8 無 BOM」格式。BOM 會導致 header()、session_start()、setcookie() 失效(輸出前已有內容)。
# httpd.conf
AddDefaultCharset Off
# 或明確指定
AddDefaultCharset utf-8
若為虛擬主機無法修改主設定,可於網站根目錄 .htaccess 加入:
AddDefaultCharset utf-8
SET NAMES 或資料庫欄位編碼錯誤accept-charset="utf-8"