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