Russian Apache Switch to English
Switch to Russian koi8-r
windows=1251
cp-866
iso8859-5
Russian Apache Как это работает Рекоммендации Где взять Как установить Как настроить Статус и поддержка
Краткий обзор FAQ Список рассылки Благодарности Поиск по серверу Powered by Russian Apache
Russian Apache mailing list archive (apache-rus@lists.lexa.ru)

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

Re: [apache-rus] грабли с русскими буквами в URL



> Hi!
>
>  >> Как должно вести себя в данном случае CharsetByExtension ? С учетом
>  >> того, что Extension может быть русский ? Нет, я правда не понимаю. А
>  >> хочется сделать продукт, поведение которого, по возможности, очевидное.
>  alr> IMHO самое простое -- всегда в названиях файлов и связанных местах
>  alr> (CharsetByExtension) использовать основную кодировку сервера.
> "Кодировки сервера" как таковой уже не существует.
>
Это осложняет дело.

> Существуют утверждения о существовании набора кодировок (CharsetDecl) и
> описания правил преобразования между ними (CharsetRecodeTable).
> Больше - ничего. Т.е. сервер определяет кодировку клиента, кодировку документа,
> а потом применяет к потоку в обе стороны соотв. преобразование (таблички).
>
Гм. Понятно.

> Так вот. Проблема по сути в том, что кодировка документа и имени документа -
> это не одно и тоже (и они могут быть разными).
>
Запросто. Как всем хорошо известно в современном мире это скорее правило, чем
исключение: при работе с Windows95 файл содержит [как правило] текст в
кодировке windows1251, а вот его имя на диске хранится в cp866 (возмите
DiskEdit и убедитесь)...

> Поэтому придется делать директиву CharsetFilenames и делать с ней
> соответствующие преобразования. А для directory index - править mod_index,
> дабы он имя файла преобразовывал из CharsetFileNames в кодировку клиента.
>
Мдааа...

> А вопрос про CharsetByExtension был задан не просто так. По extension сервер
> может (пытаться) определять кодировку _содержимого_ документа. Должен ли он
> перед этим перекодировать само имя документа (и по какой таблице). Или он
> должен сначала определить кодировку по расширению, а потом перекодировать ?
> Но ведь и расширение при этом может изменится :).
>
> Мда. Задача. Может того, ну ее нафиг ?
>
Можно и нафиг. Хозяин -- барин. Но IMHO есть [относительно] простое решение:
имена файлов в каталоге записываются в той же кодировке, в какой хранится
содержимое файлов для "обычных" файлов (так как в Unix-мире все-таки обычно
кодировка содержимого ординарных файлов совпадает с кодировкой имен файлов).
Плюс еще нужно ввести понятие кодировки для параметров файлов httpd.conf и иже
с ним. Все. Или еще более простое решение: вообще не трогать названия файлов.
Никогда. То есть в mod_index выдавать HREF (но не имена файлов) как и раньше
в виде %xx, а при преобразовании url'я часть до первого ? не трогать... Немного
"страусиное" решение, но оно проще, чем все другие и при этом относительно
"usable" (для того, чтобы понять, как ссылаться на то или иное имя нужно
переместить файл в подкаталог без index.html, зайти в этот подкаталог через
web browser и сказать "view source")... По большому счету мне пофигу -- как
будут обрабатываться русские имена файлов, но я бы хотел иметь понимание --
как именно. Имеющееся решение, где Content-length берется от одного файла,
а сам Content -- от другого IMHO уж совсем никуда не годится.

P.S. Просто как-то постепенно всюда налаживается использование русских букв в
именах файлов (MARS_NWE с моей подачи перекодирует имена файлов из cp866 в
koi8-r и обратно; Linux 2.1.x перекодирует имена файлов на VFAT'е (из cp866 или
Unicode) в koi8-r; то же самое стоит в планах у Samba и т.д... не говоря уже
про то, что символы с кодами >128 в именах файлов нормально воспринимаются
большинством *nix'овых утилит), а _*Russian*_ Apache их не поддерживает.
Конечно ему служнее, чем им всем, но он все ж таки Russian: положение обязывает...

P.P.S. Кстати как же существующий httpd догадался -- куда и как перекодировать?
Догадался он, правда, поздновато, но ведь правильно!








Спонсоры сайта:

[ Russian Apache ] [ Как это работает ] [ Рекомендации ] [ Где взять ] [ Как установить ] [ Как настроить ] [ Статус и поддержка ] [ Краткий обзор ] [ FAQ ] [ Список рассылки ] [ Благодарности ] [ Поиск по серверу ] [ Powered by Russian Apache ] [ Apache-talk archive ]

"Russian Apache" includes software developed by the Apache Group for use in the Apache HTTP server project (http://www.apache.org/) See Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C) 1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.