nginx

Модуль ngx_http_charset_module


english
русский

简体中文
עברית
日本語
türkçe

новости [en]
об nginx
скачать
безопасность [en]
pgp ключи [en]
документация
faq
ссылки [en]
книги [en]
поддержка
пожертвования [en]

trac
wiki
twitter
nginx.com
Пример конфигурации
Директивы
     charset
     charset_map
     charset_types
     override_charset
     source_charset

Модуль ngx_http_charset_module добавляет указанную кодировку в поле “Content-Type” заголовка ответа. Кроме того, модуль может перекодировать данные из одной кодировки в другую с некоторыми ограничениями:

  • перекодирование осуществляется только в одну сторону — от сервера к клиенту,
  • перекодироваться могут только однобайтные кодировки
  • или однобайтные кодировки в UTF-8 и обратно.

Пример конфигурации

include        conf/koi-win;

charset        windows-1251;
source_charset koi8-r;

Директивы

синтаксис: charset кодировка | off;
умолчание:
charset off;
контекст: http, server, location, if в location

Добавляет указанную кодировку в поле “Content-Type” заголовка ответа. Если эта кодировка отличается от указанной в директиве source_charset, то выполняется перекодирование.

Параметр off отменяет добавление кодировки в поле “Content-Type” заголовка ответа.

Кодировка может быть задана с помощью переменной:

charset $charset;

В этом случае необходимо, чтобы все возможные значения переменной присутствовали хотя бы один раз в любом месте конфигурации в виде директив charset_map, charset или source_charset. Для кодировок utf-8, windows-1251 и koi8-r для этого достаточно включить в конфигурацию файлы conf/koi-win, conf/koi-utf и conf/win-utf. Для других кодировок можно просто сделать фиктивную таблицу перекодировки, например:

charset_map iso-8859-5 _ { }

Кроме того, кодировка может быть задана в поле “X-Accel-Charset” заголовка ответа. Эту возможность можно запретить с помощью директив proxy_ignore_headers и fastcgi_ignore_headers.

синтаксис: charset_map кодировка1 кодировка2 { ... }
умолчание:
контекст: http

Описывает таблицу перекодирования из одной кодировки в другую. Таблица для обратного перекодирования строится на основании тех же данных. Коды символов задаются в шестнадцатеричном виде. Неописанные символы в пределах 80-FF заменяются на “?”. При перекодировании из UTF-8 символы, отсутствующие в однобайтной кодировке, заменяются на “&#XXXX;”.

Пример:

charset_map koi8-r windows-1251 {
    C0 FE ; # small yu
    C1 E0 ; # small a
    C2 E1 ; # small b
    C3 F6 ; # small ts
    ...
}

При описании таблицы перекодирования в UTF-8, коды кодировки UTF-8 должны быть указаны во второй колонке, например:

charset_map koi8-r utf-8 {
    C0 D18E ; # small yu
    C1 D0B0 ; # small a
    C2 D0B1 ; # small b
    C3 D186 ; # small ts
    ...
}

Полные таблицы преобразования из koi8-r в windows-1251 и из koi8-r и windows-1251 в utf-8 входят в дистрибутив и находятся в файлах conf/koi-win, conf/koi-utf и conf/win-utf.

синтаксис: charset_types mime-тип ...;
умолчание:
charset_types text/html text/xml text/plain text/vnd.wap.wml
application/x-javascript application/rss+xml;
контекст: http, server, location

Эта директива появилась в версии 0.7.9.

Разрешает работу модуля в ответах с указанными MIME-типами в дополнение к “text/html”. Специальное значение “*” соответствует любому MIME-типу (0.8.29).

синтаксис: override_charset on | off;
умолчание:
override_charset off;
контекст: http, server, location, if в location

Определяет, выполнять ли перекодирование для ответов, полученных от проксированного сервера или от FastCGI-сервера, если в ответах уже указана кодировка в поле “Content-Type” заголовка ответа. Если перекодирование разрешено, то в качестве исходной кодировки используется кодировка, указанная в полученном ответе.

Необходимо отметить, что если ответ был получен в подзапросе, то, независимо от значения директивы override_charset, всегда выполняется перекодирование из кодировки ответа в кодировку основного запроса.

синтаксис: source_charset кодировка;
умолчание:
контекст: http, server, location, if в location

Задаёт исходную кодировку ответа. Если эта кодировка отличается от указанной в директиве charset, то выполняется перекодирование.