Персональный
сайт
Игоря
Сысоева


 
english
 
sysoev.ru
 
nginx
 поехали!    
 документация    
 поддержка    
 изменения    
 скачать    
 ссылки    
 
mod_accel
mod_realip
mod_deflate
программирование
всякая всячина
windows
freebsd
apache
pppd
unix
web
 
обо мне
для писем
для денег
 

Директивы модуля ngx_http_charset_module

 

18.08.2008

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

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

Содержание

Пример конфигурации
Директивы
charset
charset_map
charset_types
override_charset
source_charset

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

    include         conf/koi-win;

    charset         windows-1251;
    source_charset  koi8-r;

Директивы


syntax: charset кодировка|off
default: charset off
context: http, server, location, if в location

Директива charset добавляет в строку "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  _ { }


syntax: charset_map кодировка1 кодировка2 { ... }
default: нет
context: http

Директива charset_map описывает таблицу перекодирования из одной кодировки в другую. Таблица для обратного перекодирования строится на основании тех же данных. Коды символов задаются в шестнадцатеричном виде. Неописанные символы в переделах 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, значения этой кодировки должны описываться во второй колонке, например:

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.


syntax: charset_types mime-тип [mime-тип ...]
default: charset_types text/html text/xml text/plain text/vnd.wap.wml application/x-javascript application/rss+xml.
context: http, server, location

Директива (0.7.9) разрешает работу модуля в ответах с указанными MIME-типами в дополнение к "text/html". По умолчанию используются

  • text/html
  • text/xml
  • text/plain
  • text/vnd.wap.wml
  • application/x-javascript
  • application/rss+xml


syntax: override_charset on|off
default: override_charset off
context: http, server, location, if в location

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

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


syntax: source_charset кодировка
default: нет
context: http, server, location, if в location

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


(C) Игорь Сысоев
http://sysoev.ru