miniBB 作為輕量級論壇系統,因開發者為海外團隊,預設未充分考慮中文編碼環境,導致中文內容顯示亂碼(如亂碼、問號、方塊字符)。
在 miniBB 目錄下找到 bb_func_txt.php 檔案,找到以下程式碼並註釋掉:
// 原始代碼
$text = wrapText($wrap, $text);
// 修改為
// $text = wrapText($wrap, $text);
wrapText() 函數用於自動換行處理,但其內部邏輯按位元組截斷字串。中文編碼(GBK/UTF-8)中,一個漢字佔 2-3 位元組,直接按位元組截斷會將漢字「切一半」,產生無效位元組序列,導致瀏覽器無法正確解碼顯示亂碼。
在 setup_mysql.php 或資料庫連線初始化處加入:
mysql_query("SET NAMES 'utf8'"); // 或 'gbk',需與頁面編碼一致
確保所有輸出頁面包含正確的 Content-Type 標頭:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
// PHP 頭部
header("Content-Type: text/html; charset=utf-8");
所有 PHP 檔案請以 UTF-8 無 BOM 格式儲存,避免 BOM 導致 header() 無法發送或頁面頂部出現空白。
確保表單頁面編碼與處理頁面一致,或在表單加入 accept-charset="utf-8"。
| 現象 | 可能原因 | 解決方向 |
|---|---|---|
| 菱形問號 | UTF-8 頁面讀取 GBK 資料,或雙重 UTF-8 編碼 | 統一編碼、檢查 SET NAMES、iconv 轉碼 |
| 亂碼如 涓夋柟 | UTF-8 資料以 GBK 解碼顯示 | 頁面宣告 charset=gbk 或資料轉碼 |
| 問號 ???? | 資料庫欄位編碼不支援該字符(如 latin1 存中文) | 修改表/欄位編碼為 utf8mb4/gbk |
| 方塊 □ | 字體缺少對應字形、編碼截斷導致無效字符 | 修復截斷邏輯、使用支援中文字體 |
註釋掉 wrapText() 通常能立即解決 90% 的 miniBB 中文亂碼問題。若問題持續,請按上述編碼環境檢查清單逐項排查,務必保證「資料庫連線、資料表欄位、PHP 檔案、頁面輸出」四者編碼完全一致。