使用 GVim 編輯 PHP 檔案,瀏覽器顯示中文亂碼;改用記事本存檔則正常。確認瀏覽器編碼設定無誤後,鎖定為 GVim 檔案編碼設定問題。
fileencoding) 與瀏覽器預期編碼 (HTTP Header Content-Type: charset=... 或 HTML <meta charset>) 不一致。encoding)、檔案偵測編碼列表 (fileencodings) 設定錯誤,導致存檔時轉碼錯誤。| 選項 | 作用 | 建議值 |
|---|---|---|
encoding | Vim 內部緩衝區編碼 (記憶體中字串表示) | utf-8 (通用、支援所有字元) |
fileencoding | 當前檔案**存檔**時使用的編碼 | utf-8 (現代 Web 標準) |
fileencodings | 開啟檔案時**偵測**編碼的優先順序列表 | ucs-bom,utf-8,cp936,gbk,big5,latin1 |
termencoding | 終端機輸出編碼 (Console 模式相關) | utf-8 或同系統預設 |
_vimrc 關鍵段落" 基本編碼設定
set encoding=utf-8
set fileencoding=utf-8
set fileencodings=ucs-bom,utf-8,cp936,gbk,big5,latin1
set termencoding=utf-8
" 避免預設存成 cp936 (chinese)
" set fileencoding=chinese " 刪除或註解此行
" set fileencodings=chinese " 刪除或註解此行
" 選單/訊息中文化 (可選)
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
language messages zh_TW.utf-8
" 字型設定 (需支援中文)
set guifont=Microsoft_JhengHei:h12:cDEFAULT
" 或 set guifont=Consolas:h12:cDEFAULT (英文) + 依靠字型回退顯示中文
" 語法高亮
syntax enable
syntax on
<?php
// 1. 腳本最開頭宣告編碼 (PHP 5.6+ 內建 UTF-8 預設,但明確宣告無害)
declare(encoding='UTF-8');
// 2. 輸出 HTTP Header 告知瀏覽器編碼 (必須在任何輸出前)
header('Content-Type: text/html; charset=UTF-8');
// 3. 資料庫連線編碼
$pdo = new PDO($dsn, $user, $pass, [
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4'
]);
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
...
:set fileencoding? 確認顯示 utf-8。Content-Type: text/html; charset=UTF-8。set fileencoding=chinese 就是中文支援:chinese 是 cp936 (GBK) 別名,現代 Web 應統一 UTF-8。charset=gbk,瀏覽器以 GBK 解碼 UTF-8 位元組 → 亂碼。fileencodings 最前放 ucs-bom 可自動偵測並移除 BOM;PHP 檔案**不應**有 BOM (會導致 header() 失效、輸出空白)。