Apache HTTP 服务器版本 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_proxy_html
版本 3.1 及更高版本之类的模块使用 xml2enc_charset
可选函数来检索要传递给 libxml2 解析器的字符集参数,并且可以使用 xml2enc_filter
可选函数来将数据后处理到另一个编码。将 mod_xml2enc 与启用的模块一起使用,无需配置:另一个模块将为您配置 mod_xml2enc(尽管您可能仍然希望使用下面的配置指令对其进行自定义)。
要将其与未明确为 mod_xml2enc 启用的基于 libxml2 的模块一起使用,您必须自己配置过滤器链。因此,要将其与模块 mod_foo 提供的过滤器 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 的过滤器模块默认情况下将输出该编码。mod_xml2enc 可以通过 API 更改输出编码,但目前无法直接配置它。
更改输出编码(理论上至少)永远不会有必要,并且由于服务器上不必要的转换造成的额外处理负载,因此不建议这样做。
如果您使用的是平台上任何转换方法都不支持的编码,您仍然可以使用 xml2EncAlias
将它们别名为支持的编码。
描述 | 识别编码值的别名 |
---|---|
语法 | xml2EncAlias charset alias [alias ...] |
上下文 | 服务器配置 |
状态 | 基础 |
模块 | mod_xml2enc |
此服务器范围的指令将一个或多个编码别名为另一个编码。这使 libxml2 未识别的编码能够通过使用已识别编码的转换表在 libxml2 的编码支持下在内部进行处理。这有两个目的:支持 libxml2 或 iconv 未识别的字符集(或名称),以及跳过已知不必要的编码的转换。