• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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。