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!
>
>  alr> Можно и нафиг. Хозяин -- барин. Но IMHO есть [относительно] простое
>  alr> решение: имена файлов в каталоге записываются в той же кодировке, в какой
>  alr> хранится содержимое файлов для "обычных" файлов (так как в Unix-мире
> Понятие "обычный файл" (i.e. CharsetSourceEnc) может быть не определено.
>
Тогда отключить вообще все процедуры перекодирования имен файлов...

>  alr> P.S. Просто как-то постепенно всюда налаживается использование русских
>  alr> букв в именах файлов (MARS_NWE с моей подачи перекодирует имена файлов из
>  alr> cp866 в koi8-r и обратно; Linux 2.1.x перекодирует имена файлов на VFAT'е
>  alr> (из cp866 или Unicode)
> Но ведь у вас не так ? Содержимое файлов - в cp1251, содержимое каталога -
> koi8-r, разве нет ?
>
У меня вообще каша с маслом :(( Так как у меня есть в качестве клиентов DOS,
Windows (3.1x & 95), Linux & Mac (многие, наверное, скажут, что для средней
школы это многовато, но так уж вышло), то у меня содержимое файлов хранится в
*четырех* кодировках :(( Но вот имена файлов -- только в koi8-r: пришлось,
правда, сделать patch'и для smbfs, mars_nwe и CAP, а для fatfs & isofs эти патчи
сделали без меня, но зато я избавлен от необходимости при ревизии диска
разбираться с листингом, в котором фигурируют имена файлов сразу в нескольких
кодировках... С содержимым файлов этого сделать нельзя ибо не все файлы с
текстом -- текстовые :(( Есть, к примеру, WinWord, Claris Works, etc.

>  alr> P.P.S. Кстати как же существующий httpd догадался -- куда и как
>  alr> перекодировать? Догадался он, правда, поздновато, но ведь правильно!
> В смысле ? Кодировка клиента - как обычно, кодировка файла - скорее всего по
> CharsetSourceEnc. Там же (как я помню) filename тоже перекодируется, как ни
> смешно, но слишком поздно.
>
Лучше бы уж оно не перекодировалось вообще :(

> В-общем, я увидел пока такие вот проблемы:
> 1) Единственное место, куда вписывается это хозяйство - это на этап URL
> rewriting. Но на этом этапе кодировка клиента еще не определена. При этом,
> перемещение определения кодировки клиента на эту фазу тоже делать не хочется
> (определение кодировки в последнюю фазу вызвано тем, что сначала хочется
> дождаться всех internal-redirects). Это - принципиальная проблема.
>
Пожалуй это действительно самая большая проблема... Впрочем если делать patch
для contrib, а не для mainstream, то достаточно постулировать, что он требует
определения кодировки только по номеру порта и/или по типу клиента и вынести
определение до URL rewriting...

> 2) Смена URL на ходу может привести к странной работе всяких Alias/RewriteRule
> и так далее. Т.е. будет наблюдаться явная интерференция. Этой интерференции
> почти нет _сейчас_ в реальной жизни т.к. никто не пишет Alias/Redirect
> для одного URL'а. А тут будет такой неявный RewriteEngine для всех URL.
>
> 3) как это должно работать с транслитом мне вообще непонятно.
>
Гы. Никак :(( Но его вроде бы в mainstream и нету -- или я неправ?

> 4) так же мне непонятна как это должно работать, например, если происходит
> internal redirect и у нового URL уже другая кодировка CharsetFilename.
>
Час отчасу не легче :(( Впрочем если постараться, то IMHO можно разработать
непротиворечивый набор правил :) А вот что делать с транслитом -- вообще
загадка...

> Резюме. У меня пока вопросов больше чем ответов. С удовольствием приму патч
> и положу в директорию contrib, но если патч не будет иметь при себе ответов
> на вопросы 1)..4), то снабжу его  нелицеприятным комментарием.
>
Будем думать. Но похоже, что если отменить вообще всякую перекодировку filename,
то это уже приведет к более работоспособной по отношению к русским именам файлам
версии -- можно будет просто использовать задание имени файла в URL'е через %xx
(как, в сущности, и положено)... Может быть именно это решение стоит внести в
mainstream ? Простое, непротиворичивое, быстрое и более работоспособное, чем
сейчас, решение :)) А б\'ольшие навороты оставить "на потом" ... Если кто-нибудь
придумает решение с удовлетворительными ответами на вопросы 1)..4) ...

P.S. А в mod_index оставить перекодирование имен файлов в тексте и не трогать
создание HREF'ов ... Тогда человек будет видеть "человеческие" (русские) имена
файлов в списке и "птичий" (но работающий!) link ...








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

[ 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.