Spec-Zone.ru › Apache HTTP Server

Модуль Apache mod_xml2enc

Описание: Расширенная поддержка кодировок и интернационализации для модулей фильтров на основе libxml2
Статус: Базовый
Идентификатор модуля: xml2enc_module
Исходный файл: mod_xml2enc.c
Совместимость: Версия 2.4 и выше. Для версий 2.2.x доступен как сторонний модуль

Краткое описание

Этот модуль предоставляет расширенную поддержку интернационализации для модулей фильтров, учитывающих разметку, таких как mod_proxy_html. Он может автоматически определять кодировку входных данных и обеспечивать их корректную обработку парсером libxml2, включая преобразование в Unicode (UTF-8), если это необходимо. Он также может преобразовывать данные в выбранную кодировку после обработки разметки и обеспечивать установку правильного значения charset в заголовке HTTP Content-Type.

Использование

Предусмотрено два сценария использования: с модулями, запрограммированными для работы с mod_xml2enc, и с модулями, которые о нём не знают:

Модули фильтров с поддержкой mod_xml2enc

Такие модули, как mod_proxy_html версии 3.1 и выше, используют необязательную функцию xml2enc_charset для получения аргумента кодировки, передаваемого парсеру libxml2, и могут использовать необязательную функцию xml2enc_filter для последующей обработки с преобразованием в другую кодировку. При использовании mod_xml2enc с модулем, имеющим поддержку, конфигурация не требуется: другой модуль настроит mod_xml2enc за вас (хотя при необходимости вы можете настроить его с помощью приведённых ниже директив).

Модули без поддержки

Чтобы использовать его с модулем на основе libxml2, который явно не поддерживает mod_xml2enc, необходимо самостоятельно настроить цепочку фильтров. Например, чтобы улучшить поддержку i18n для HTML и XML у фильтра foo, предоставляемого модулем mod_foo, можно использовать

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.

Программный API

Разработчикам, создающим модули фильтров на основе libxml2, рекомендуется обеспечить их поддержку mod_xml2enc, чтобы предоставить пользователям надёжную поддержку i18n и не изобретать велосипед. Программный API описан в mod_xml2enc.h, а пример использования доступен mod_proxy_html.

Определение кодировки

В отличие от mod_charset_lite, mod_xml2enc предназначен для работы с данными, кодировка которых заранее неизвестна и поэтому не может быть задана в конфигурации. Поэтому для определения кодировки данных HTTP он использует следующие методы «распознавания»:

  1. Если заголовок HTTP Content-Type содержит параметр charset, используется его значение.
  2. Если данные начинаются с маркера порядка байтов (BOM) XML или объявления кодировки XML, используется указанная кодировка.
  3. Если кодировка объявлена в элементе HTML <META>, используется указанная кодировка.
  4. Если ни одно из перечисленных условий не выполняется, используется значение по умолчанию, заданное директивой xml2EncDefault.

Правила применяются по порядку. Как только найдено совпадение, используется соответствующее значение, а определение кодировки прекращается.

Кодировка вывода

libxml2 всегда использует внутри UTF-8 (Unicode), и модули фильтров на основе libxml2 по умолчанию выводят данные в этой кодировке. mod_xml2enc может изменить кодировку вывода через API, но в настоящее время настроить её напрямую невозможно.

Изменение кодировки вывода (по крайней мере, теоретически) никогда не должно требоваться и не рекомендуется из-за дополнительной нагрузки на сервер при ненужном преобразовании.

Неподдерживаемые кодировки

Если вы используете кодировки, не поддерживаемые ни одним из доступных на вашей платформе методов преобразования, их всё равно можно связать с поддерживаемой кодировкой с помощью xml2EncAlias.

Директива xml2EncAlias

Описание: Распознавание псевдонимов кодировок
Синтаксис:
xml2EncAlias charset alias [alias ...]
Контекст: конфигурация сервера
Статус: Базовый
Модуль: mod_xml2enc

Эта директива уровня сервера задаёт один или несколько псевдонимов для другой кодировки. Это позволяет обрабатывать кодировки, не распознаваемые libxml2, с помощью встроенной поддержки кодировок libxml2, используя таблицу преобразования для распознаваемой кодировки. Это решает две задачи: поддержку наборов символов (или их названий), не распознаваемых libxml2 или iconv, и пропуск преобразования для кодировки, для которой оно заведомо не требуется.

Директива xml2EncDefault

Описание: Задаёт кодировку по умолчанию, если её невозможно определить автоматически
Синтаксис:
xml2EncDefault name
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Статус: Базовый
Модуль: mod_xml2enc

Если вы обрабатываете данные с известной кодировкой, но сведения о ней отсутствуют, задайте это значение по умолчанию, чтобы помочь mod_xml2enc правильно обработать данные. Например, чтобы использовать значение Latin1 (iso-8859-1) по умолчанию, указанное в HTTP/1.0, задайте:

xml2EncDefault iso-8859-1

Директива xml2StartParse

Описание: Указывает парсеру пропустить начальный посторонний текст.
Синтаксис:
xml2StartParse element [element ...]
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Статус: Базовый
Модуль: mod_xml2enc

Укажите, что парсер разметки должен начинать работу с первого найденного элемента из указанных. Это можно использовать как обходное решение в случаях, когда неисправный серверный компонент добавляет в начало данные, мешающие работе парсера (пример здесь).

Эту директиву нельзя использовать для XML и корректно сформированного HTML.

© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_xml2enc.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API