Spec-Zone.ru › Apache HTTP Server

Модуль Apache mod_xml2enc

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

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

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

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

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

Модули фильтрации, включенные для mod_xml2enc

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

Модули без включения

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

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, не придумывая велосипед. Программный интерфейс доступен в mod_xml2enc.h, а пример использования приведен в mod_proxy_html.

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

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

  1. Если заголовок HTTP Content-Type содержит параметр charset, он используется.
  2. Если данные начинаются с отметки порядка байтов XML (BOM) или объявления кодировки 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