mod_xml2enc
描述: | 增强了对 libxml2-based 过滤器模块的 charset/internationalisation 支持 |
状态: | Base |
模块标识符: | xml2enc_module |
源文件: | mod_xml2enc.c |
兼容性: | Version 2.4 以及之后。可用作 2.2.x 版本的 third-party 模块 |
摘要
该模块为 markup-aware 过滤器模块(如mod_proxy_html)提供增强的国际化支持。它可以自动检测输入数据的编码,并确保libxml2解析器正确处理它们,包括必要时转换为 Unicode(UTF-8)。它还可以在标记处理后将数据转换为选择的编码,并确保在 HTTP Content-Type 标头中设置正确的 charset value。
用法
有两种使用场景:模块编程为与 mod_xml2enc 一起使用,以及那些不知道它的模块:
- 为 mod_xml2enc 启用过滤器模块
诸如 mod_proxy_html version 3.1 和 up 之类的模块使用 xml2enccharset optional function 来检索传递给 libxml2 解析器的 charset 参数,并且可以使用 xml2enc_filter 可选 function 将后处理转换为另一种编码。将 mod_xml2enc 与启用的模块一起使用时,不需要 configuration:另一个模块将为您配置 mod_xml2enc(尽管您可能仍希望使用下面的 configuration 指令对其进行自定义)。 - Non-enabled 模块
要将其与未明确启用 mod_xml2enc 的 libxml2-based 模块一起使用,您必须自己配置过滤器链。因此,要使用模块 mod_foo 提供的过滤器 foo 来改进后者对 HTML 和 XML 的 i18n 支持,您可以使用它
FilterProvider iconv xml2enc Content-Type $text/html
FilterProvider iconv xml2enc Content-Type $xml
FilterProvider 标记 foo Content-Type $text/html
FilterProvider 标记 foo Content-Type $xml
FilterChain iconv 标记
mod_foo 现在将支持 libxml2 或 apr_xlate/iconv 中任一个(或两个)支持的任何字符集。
编程 API
编写 libxml2-based 过滤器模块的程序员被鼓励为 mod_xml2enc 启用它们,为您的用户提供强大的 i18n 支持,而无需重新发明轮子。编程 API 在 mod_xml2enc.h 中公开,而用法 example 是mod_proxy_html。
检测编码
与mod_charset_lite不同,mod_xml2enc 旨在处理其编码无法事先知道并因此配置的数据。因此,它使用“嗅探”技术来检测 HTTP 数据的编码,如下所示:
- 如果 HTTP Content-Type 标头包含 charset 参数,则使用该参数。
- 如果数据以 XML Byte Order Mark(BOM)或 XML 编码声明开头,则使用该数据。
- 如果在 HTML
<META>
元素中声明了编码,则使用该编码。 - 如果上述 match 的 none,则使用
xml2EncDefault
设置的默认 value。
规则在 order 中应用。一旦找到 match,就会使用它并停止检测。
输出编码
libxml2始终在内部使用 UTF-8(Unicode),libxml2-based 过滤器模块将默认输出。 mod_xml2enc 可以通过 API 更改输出编码,但目前无法直接配置。
更改输出编码应该(理论上至少)永远不需要,并且由于服务器上不必要的转换带来额外的处理负担,因此不建议这样做。
不支持的编码
如果您正在使用平台上可用的任何转换方法不支持的编码,您仍然可以使用xml2EncAlias
将它们替换为支持的编码。
xml2EncAlias 指令
描述: | 识别别名以编码值 |
句法: | xml2EncAlias charset alias[alias ...] |
Context: | 服务器配置 |
状态: | Base |
模块: | mod_xml2enc |
此 server-wide 指令将一个或多个编码别名为另一个编码。这使得 libxml2 无法识别的编码可以通过 libxml2 的编码支持在内部使用翻译 table 进行识别编码。这有两个目的:支持 libxml2 或 iconv 无法识别的字符_set(或名称),并跳过已知不必要的编码的转换。
xml2EncDefault 指令
描述: | 设置一个默认编码,假设绝对没有信息可以自动检测到 |
句法: | xml2EncDefault name |
Context: | server config,virtual host,directory,.htaccess |
状态: | Base |
模块: | mod_xml2enc |
如果您正在处理具有已知编码但没有编码信息的数据,则可以将此默认值设置为帮助 mod_xml2enc 处理数据。对于 example,要使用 HTTP/1.0 中指定的 Latin1(iso-8859-1)的默认 value,请使用:
xml2EncDefault iso-8859-1
xml2StartParse 指令
描述: | 建议解析器跳过主要垃圾邮件。 |
句法: | xml2StartParse element[element ...] |
Context: | server config,virtual host,directory,.htaccess |
状态: | Base |
模块: | mod_xml2enc |
指定标记解析器应从指定的任何元素的第一个实例开始。这可以用作一种解决方法,其中损坏的后端插入混乱解析器(example here)的主要垃圾。
它永远不应该用于 XML,也不能用于 well-formed HTML。