Apache HTTP Server 版本 2.4
說明 | 支援 libxml2 濾鏡模組的進階字元集/國際化 |
---|---|
狀態 | 基本 |
模組識別 | xml2enc_module |
來源檔案 | mod_xml2enc.c |
相容性 | 版本 2.4 和更新版本。適用於 2.2.x 版本的第三方模組 |
此模組為標記感知濾鏡模組(例如 mod_proxy_html
)提供進階的國際化支援。它可以自動偵測輸入資料的編碼,並確保這些資料由 libxml2 解析器正確處理,包括在必要時轉換為 Unicode (UTF-8)。它也可以在標記處理之後轉換資料為您選擇的編碼,並將確保在 HTTP Content-Type 標頭中設定正確的 charset 值。
有兩個使用情境:與已編寫為與 mod_xml2enc 搭配使用的模組搭配使用,以及與不支援 mod_xml2enc 的模組搭配使用
例如 mod_proxy_html
3.1 及更新版本等模組使用 xml2enc_charset
選用功能來擷取要傳遞給 libxml2 解析器的字元集參數,並可能會使用 xml2enc_filter
選用功能對其他編碼進行後續處理。與已啟用的模組搭配使用時,不需配置 mod_xml2enc:其他模組將會協助您配置 mod_xml2enc(雖然您仍可能想要使用以下的組態指令自訂它)。
如果你要搭配使用沒有在 mod_xml2enc 中明確啟用的、以 libxml2 為基礎的模組,則必須自行設定過濾器鏈。因此在使用過濾器 foo 搭配模組 mod_foo 來提升對 HTML 和 XML 的 i18n 支援,你可以執行下列動作
FilterProvider iconv xml2enc Content-Type $text/html
FilterProvider iconv xml2enc Content-Type $xml
FilterProvider markup foo Content-Type $text/html
FilterProvider markup foo Content-Type $xml
FilterChain iconv markup
mod_foo 現能支援 libxml2 或 apr_xlate/iconv 支援的一組字元集。
我們建議撰寫基於 libxml2 的過濾器模組的程式設計人員為 mod_xml2enc 啟用這些模組,以在不重新發明輪子的情況下為你的使用者提供強大的 i18n 支援。程式設計 API 在 mod_xml2enc.h 中揭露,而且使用範例為 mod_proxy_html
。
與 mod_charset_lite
不同,mod_xml2enc 的設計目的在於處理無法事先得知編碼資料,因此無法設定編碼。因此它使用下列「嗅探」技術來偵測 HTTP 資料的編碼
<META>
元素中宣告了編碼,則會使用該編碼。xml2EncDefault
設定的預設值。規則會依序套用。只要找到相符條件,就會套用該條件並停止偵測。
libxml2 內部始終使用 UTF-8(Unicode),而且基於 libxml2 的過濾器模組會以 UTF-8 為預設輸出。mod_xml2enc 可以透過 API 變更輸出編碼,但目前沒有方法能直接設定輸出編碼。
變更輸出編碼(至少在理論上)應該永遠都不必要,而且不建議這麼做,因為這會讓不需要的轉換在伺服器上負擔較重的處理工作。
如果你的作業環境上有哪些編碼格式不受任何轉換方法所支援,你可以使用 xml2EncAlias
建立別名將這些編碼格式對應到受支援的編碼格式。
說明 | 辨識編碼值別名 |
---|---|
語法 | xml2EncAlias charset alias [alias ...] |
內容 | 伺服器設定 |
狀態 | 基本 |
模組 | mod_xml2enc |
這個全伺服器指令將一個以上的編碼別名設成另一個編碼。這讓 libxml2 辨識不到的編碼,能使用已辨識編碼的轉換表格,由 libxml2 的編碼支援內部處理。這樣有兩個目的:支援 libxml2 或 iconv 都辨識不到的字元集(或名稱),以及針對知道不必要的編碼跳過轉換。