charset

Igor Sysoev is at rambler-co.ru
Sun Jul 10 12:56:19 MSD 2005


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





More information about the nginx-ru mailing list