<-
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_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 中任何一个(或两者)支持的任何字符集。

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 的过滤器模块默认情况下将输出该编码。mod_xml2enc 可以通过 API 更改输出编码,但目前无法直接配置它。

更改输出编码(理论上至少)永远不会有必要,并且由于服务器上不必要的转换造成的额外处理负载,因此不建议这样做。

top

不支持的编码

如果您使用的是平台上任何转换方法都不支持的编码,您仍然可以使用 xml2EncAlias 将它们别名为支持的编码。

top

xml2EncAlias 指令

描述识别编码值的别名
语法xml2EncAlias charset alias [alias ...]
上下文服务器配置
状态基础
模块mod_xml2enc

此服务器范围的指令将一个或多个编码别名为另一个编码。这使 libxml2 未识别的编码能够通过使用已识别编码的转换表在 libxml2 的编码支持下在内部进行处理。这有两个目的:支持 libxml2 或 iconv 未识别的字符集(或名称),以及跳过已知不必要的编码的转换。

top

xml2EncDefault 指令

描述设置一个默认编码,当绝对无法 自动检测 到任何信息时,将假定该编码
语法xml2EncDefault name
上下文服务器配置、虚拟主机、目录、.htaccess
状态基础
模块mod_xml2enc

如果您正在处理具有已知编码但没有编码信息的数据,您可以设置此默认值以帮助 mod_xml2enc 正确处理数据。例如,要使用 HTTP/1.0 中指定的 Latin1 (iso-8859-1) 的默认值,请使用

xml2EncDefault iso-8859-1
top

xml2StartParse 指令

描述建议解析器跳过前导垃圾。
语法xml2StartParse element [element ...]
上下文服务器配置、虚拟主机、目录、.htaccess
状态基础
模块mod_xml2enc

指定标记解析器应从指定的任何元素的第一个实例开始。这可以用作一种解决方法,在该方法中,损坏的后端插入了前导垃圾,这些垃圾会弄乱解析器(此处示例)。

它永远不应该用于 XML,也不应该用于格式良好的 HTML。

可用语言:  en  |  fr 

top

评论

注意
这不是问答部分。此处放置的评论应指向有关改进文档或服务器的建议,如果它们被实施或被认为无效/主题外,可能会被我们的版主删除。有关如何管理 Apache HTTP 服务器的问题应发送到我们的 IRC 频道 #httpd(在 Libera.chat 上)或发送到我们的 邮件列表