На данный момент ngx_http_charset_module работает так:
1) есть директива charset on|off, которая включает работу модуля;
2) есть директива default_charset, которая задаёт кодировку ответа;
3) есть директива source_charset, которая задаёт исходную кодировку.
Если source_charset и default_charset не совпадают, то делается
перекодировка.
Если же задана только одна из таких директив, то перекодировка не
делается,
а просто выставляется charset, исходя из этой директивы.
Мне такое положение кажется избыточным и неудобным.
charset on|off появилась в связи с тем, что были планы сделать
автоопределение кодировки клиента, как в руссокм Апаче.
Поскольку планы изменились и автоопределения не будет, то можно
сделать такие изменения:
1) директива charset задаёт кодировку ответа, charset off запрещает
выдачу
кодировки;
2) директива source_charset, которая задаёт исходную кодировку.
Если source_charset и charset не совпадают, то делается перекодировка.
Если задан только source_charset, то ничего не делается.
То есть, если я в сервере хочу переопределить source_charset, мне надо там
обязательно выставить и charset, чтобы оставить перекодировку выключенной
(Если в http я задал умолчания)? Это плохо. Можно ли сделать в charset
третью альтернативу - "source_charset", которая будет указывать, что
перекодировку делать не надо никогда, а кодировку ответа выставлять всегда
в source_charset? То есть, где-то так:
charset <кодировка>|off|source_charset
Предлагается следующее:
http {
# Content-Type: ...; charset=windows-1251
# перекодирование из koi8-r в windows-1251
charset windows-1251;
source_charset koi8-r;
server {
# унаследованный Content-Type: ...; charset=windows-1251
# перекодирования нет, так как charset и source_charset совпадают
source_charset windows-1251;
}
Вот, и я об этом - если я теперь добавлю
server {
# в нём нет *charset
}
То в нём перекодировка будет по умолчанию. Если я этого не хочу, мне надо там
написать ОБЕ директивы с одинаковым значением.
На мой взгляд, сейчас типичным является только задание кодировки без
перекодирования. В этом случае конифгруации могут выглядеть так:
http {
charset windows-1251;
server {
# "charset windows-1251" наследуется
}
server {
charset utf-8;
}
server {
# "charset windows-1251" наследуется
# перекодирование из koi8-r в windows-1251
source_charset koi8-r;
}
Игорь Сысоев
http://sysoev.ru