在 nginx 上調整所有文本的編碼
全站的文字檔都使用相同編碼是很常見的。尤其是 UTF-8
儼然是今日的實作標準。然而,nginx 預設的 charset_types
設定不包括 text/css
,遑論其他非純文本。(例如 text/markdown
)
預設的 charset_types
應該要是 text/*
才對,因為為了向後相容,許多 text/*
格式預設解讀為 ASCII (us-ascii
)。就連 text/xml
也是如此,即使檔案中有 BOM 和 XML
宣告也徒勞無功。所以,現在我們應該用 application/xml
來傳遞
XML。
然而 charset_types
設定只檢查完全符合的 MIME,不然就必須用 *
匹配所有類型。幸好 nginx 有可以匹配正則表達式的 map
,而且 charset_types
也接受變數。
map $sent_http_content_type $charset {
~^text/ utf-8;
}
charset $charset;
charset_types *;
這樣的設定會讓 nginx 指定所有文本為 UTF-8,例如 text/css; charset=utf-8
。