ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: charset



On Sun, 10 Jul 2005, Andrey N. Oktyabrski wrote:

Igor Sysoev wrote:
On Sun, 10 Jul 2005, Andrey N. Oktyabrski wrote:

Igor Sysoev wrote:


На данный момент 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




 




Copyright © Lexa Software, 1996-2009.