<-
Apache > HTTP 伺服器 > 文件 > 版本 2.4 > 模組

Apache 模組 mod_xml2enc

可用的語言:  en  |  fr 

說明支援 libxml2 濾鏡模組的進階字元集/國際化
狀態基本
模組識別xml2enc_module
來源檔案mod_xml2enc.c
相容性版本 2.4 和更新版本。適用於 2.2.x 版本的第三方模組

摘要

此模組為標記感知濾鏡模組(例如 mod_proxy_html)提供進階的國際化支援。它可以自動偵測輸入資料的編碼,並確保這些資料由 libxml2 解析器正確處理,包括在必要時轉換為 Unicode (UTF-8)。它也可以在標記處理之後轉換資料為您選擇的編碼,並將確保在 HTTP Content-Type 標頭中設定正確的 charset 值。

Support Apache!

主題

指令

錯誤修正檢查表

請參閱

top

用法

有兩個使用情境:與已編寫為與 mod_xml2enc 搭配使用的模組搭配使用,以及與不支援 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 支援的一組字元集。

top

程式設計 API

我們建議撰寫基於 libxml2 的過濾器模組的程式設計人員為 mod_xml2enc 啟用這些模組,以在不重新發明輪子的情況下為你的使用者提供強大的 i18n 支援。程式設計 API 在 mod_xml2enc.h 中揭露,而且使用範例為 mod_proxy_html

top

偵測編碼

mod_charset_lite 不同,mod_xml2enc 的設計目的在於處理無法事先得知編碼資料,因此無法設定編碼。因此它使用下列「嗅探」技術來偵測 HTTP 資料的編碼

  1. 如果 HTTP Content-Type 主要標題包含 charset 參數,則會使用該參數。
  2. 如果資料以 XML 位元組順序標記(BOM)或 XML 編碼宣告開頭,則會使用該編碼。
  3. 如果在 HTML <META> 元素中宣告了編碼,則會使用該編碼。
  4. 如果以上條件都不符合,則會使用由 xml2EncDefault 設定的預設值。

規則會依序套用。只要找到相符條件,就會套用該條件並停止偵測。

top

輸出編碼

libxml2 內部始終使用 UTF-8(Unicode),而且基於 libxml2 的過濾器模組會以 UTF-8 為預設輸出。mod_xml2enc 可以透過 API 變更輸出編碼,但目前沒有方法能直接設定輸出編碼。

變更輸出編碼(至少在理論上)應該永遠都不必要,而且不建議這麼做,因為這會讓不需要的轉換在伺服器上負擔較重的處理工作。

top

不支援的編碼

如果你的作業環境上有哪些編碼格式不受任何轉換方法所支援,你可以使用 xml2EncAlias 建立別名將這些編碼格式對應到受支援的編碼格式。

top

xml2EncAlias 指令

說明辨識編碼值別名
語法xml2EncAlias charset alias [alias ...]
內容伺服器設定
狀態基本
模組mod_xml2enc

這個全伺服器指令將一個以上的編碼別名設成另一個編碼。這讓 libxml2 辨識不到的編碼,能使用已辨識編碼的轉換表格,由 libxml2 的編碼支援內部處理。這樣有兩個目的:支援 libxml2 或 iconv 都辨識不到的字元集(或名稱),以及針對知道不必要的編碼跳過轉換。

top

xml2EncDefault 指令

說明當完全沒有資訊時,設定預設編碼以便自動偵測
語法xml2EncDefault 名稱
內容伺服器設定、虛擬主機、資料夾、.htaccess
狀態基本
模組mod_xml2enc

如果你要處理已知編碼但沒有編碼資訊的資料,你可以設定這個預設值來協助 mod_xml2enc 正確處理這個資料。例如,若要使用 HTTP/1.0 中指定的 Latin1 預設值 (iso-8859-1),請使用

xml2EncDefault iso-8859-1
top

xml2StartParse 指令

說明建議剖析器跳過不必要的內容。
語法xml2StartParse 元素 [元素 ...]
內容伺服器設定、虛擬主機、資料夾、.htaccess
狀態基本
模組mod_xml2enc

指定標記語言剖析器應從所指定元素的任意第一個執行個體開始。當有損毀的後端會插入會讓剖析器混亂的不必要的內容時,可以使用此作為替代方案(此處有範例)。

永遠不應把它用於 XML 或結構良好的 HTML。

可用的語言:  en  |  fr 

top

意見

注意
這不是問答區。放在這裡的註解應朝著改善文件或伺服器的建議進行,如果被實作或被認為無效/離題,我們的管理員可能會將其移除。關於 Apache HTTP Server 管理方式的問題,應直接傳送給我們的 IRC 頻道 Libera.chat 上的 #httpd,或傳送到我們的郵件列表