+  HandyCache форум
|-+  Главная категория» Общие вопросы» Алгоритм преобразования URL в имя файла в кэше
Имя пользователя:
Пароль:
Страниц: 1 2 3 [4] 5 6 ... 13   Вниз
  Отправить эту тему    Печать  
Автор Тема: Алгоритм преобразования URL в имя файла в кэше  (Прочитано 234145 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
mai62
Автор HC
*****

Репутация: +226/-4
Offline Offline

Сообщений: 6383


« Ответ #60 : 11 марта 2007, 13:36:10 »

v0lt
Цитировать
Пора узнать мнение Главного раработчика
Спасибо за проделанную работу по обобщению предложений. Добавь, пожалуйста, в табличках колонку, отображающую нынешнее поведение НС. Мне представляется важным по возможности сохранить совместимость с прежними версиями НС.
Сообщить модератору   Записан
popkov
Beta tester
*****

Репутация: +3/-0
Offline Offline

Сообщений: 349


« Ответ #61 : 11 марта 2007, 18:01:02 »

Поповоду неразрывного пробела, надо проверять, как он поведет себя на FAT, на unix-овых ФС.
На FAT ведёт себя нормально - проверено неоднократно мной! У меня папка "Ссылки" IE уже не первый год на FAT переименована в неразрывный пробел! И никаких глюков ни разу не было! И простые файлы тоже нормально создаются и обрабатываются! Проверял!
По поводу %22->## я тем более против.
А где аргументация? Чем тебе не нравится такой прозрачный и легкочитаемый способ кодирования?
Сообщить модератору   Записан
popkov
Beta tester
*****

Репутация: +3/-0
Offline Offline

Сообщений: 349


« Ответ #62 : 11 марта 2007, 18:10:08 »

я не вижу проблемы выше приведенные урлы с "GPS/Gps" по сути ведут на одну и туже пустую страницу. Приведите более серьезные аргументы Улыбка
HandyCache у тебя выдала ту самую ошибку, о которой говорил
Потом когда мы введем правильное название http://ru.wikipedia.org/wiki/GPS, то HC увидит что такой файл уже есть в кэше и может отказаться его обновлять.
Зайди на http://ru.wikipedia.org/wiki/GPS
 - но отключив чтение из кэша! Тебе откроется вовсе не пустая страница...
(если всё же откроется пустая - это IE виноват! Обнови страницу при выключенном чтении из кэша!)
Сообщить модератору   Записан
v0lt
Beta tester
*****

Репутация: +7/-0
Offline Offline

Сообщений: 127


« Ответ #63 : 11 марта 2007, 20:14:37 »

Цитата: cepera_ang
В файловой системе Unix запрещены два символа - "/" (обозначает папки в пути) и "\000" (то есть нулл символ, обозначающий конец имени файла). Все остальные символы - разрешены.
Спасибо, а как там с уникодом?

Цитата: popkov
А где аргументация? Чем тебе не нравится такой прозрачный и легкочитаемый способ кодирования?
Не знаю чего сказать, ну не нравиться мне %22->##. Если бы уж очень понадобилось %23->##, я может и согласился (по другому тут глупо кодировать). В принципе обратное преобразовние в URL особо не усложняется (всего то поставить s:=StringReplace(s,'##','%22',[rfReplaceAll]) в самое начало функции), но только из-за прозрачности, не знаю, не знаю... внуть кеша не каждый полезет, проще в Историке найти нужное (обычно)
Цитата: popkov
но отключив чтение из кэша! Тебе откроется вовсе не пустая страница...
(если всё же откроется пустая - это IE виноват! Обнови страницу при выключенном чтении из кэша!)
Разобрался, пришлось почистить кеш Firefox... Грустный
Значит кодируем опционально и в стандартные настройки для примера вбиваем "wikipedia.org"

Цитата: mai62
Спасибо за проделанную работу по обобщению предложений. Добавь, пожалуйста, в табличках колонку, отображающую нынешнее поведение НС. Мне представляется важным по возможности сохранить совместимость с прежними версиями НС.
Всегда пожалуйста.
Сейчас дополню табличку...
PS: маленькая просьба. Сразу новую версию не выпускай. Еще остались пара вопросов и конвертера нет.
Сообщить модератору   Записан
cepera_ang
Beta tester
*****

Репутация: +9/-4
Offline Offline

Сообщений: 355


« Ответ #64 : 11 марта 2007, 20:21:50 »

Спасибо, а как там с уникодом?
В современных юниксах, насколько я знаю, с уникодом все в порядке.
Сообщить модератору   Записан
v0lt
Beta tester
*****

Репутация: +7/-0
Offline Offline

Сообщений: 127


« Ответ #65 : 11 марта 2007, 20:24:13 »

для mai62

Преобразования URL<->filename (измениния/дополнения выделены жирным)

Лечим глюки IE (приводим урл к стандарту)
символ0.98b1до "?"после "?"
URL#строкаURLURL
"%22
<%3C
>%3E
`%60
^%5E^ (не кодируем)


Основная часть кодирования
символ0.98b1до "?"после "?"
/\\#%
//\~\#%#%#%
*#x#x
\#~#~
|#i#i
!#I! (не кодируем)
:!#= или #!
?^\  #^^\#^


Красивости (новое)
строказамена
%D1%8Fя (кирилица)
%20пробел
Можно сделать опционально. В будущем можно добавить другие кодировки.

Опциональное кодирование регистра (новое)
строказамена
W`w или `W
`w или `W не принципиально.
2popkov По поводу неразвывного пробела (символ 0160). Напрягает, то что его номер больше 127, поэтому на некоторых системах он может выглядеть по другому, для спец кода это плохо. Еще возможно путаница (выглядит как пробел) и есть проблемы ручного редактирования. Обратная ковычка поудобнее будет.

Редирект и решение проблем
строка0.98b1замена
редиректредирект#mредирект#m
.\.#n\
пробел\пробел#n\
путь\путь\#_путь\#_
путь.путь.#_
путьпробелпутьпробел#_
Добавилось следующее: если папка или файл заканчиваются точкой или пробелом, то соответственно добавляем #n и #_

Остальное на предыдущей странице...
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #66 : 11 марта 2007, 21:17:42 »

v0lt

В первых двух твоих таблицах колонка "после "?" не заполнена, хотя, на мой взгляд, она должна совпадать с колонкой "до "?". Или так и задумывалось, а движок форума тебя не понял? Подмигивающий

В таблице "Красивости (новое)" сейчас только одна буква "я" и пробел. Может, сразу расписать кодировку всех символов в верхнем и нижнем регистре?

Собственно, можешь приаттачить к посту файл в формате Excel или Word, чтобы не мучаться с таблицами в BB-коде...
Сообщить модератору   Записан
v0lt
Beta tester
*****

Репутация: +7/-0
Offline Offline

Сообщений: 127


« Ответ #67 : 11 марта 2007, 22:46:48 »

Цитата: DenZzz
В первых двух твоих таблицах колонка "после "?" не заполнена, хотя, на мой взгляд, она должна совпадать с колонкой "до "?". Или так и задумывалось, а движок форума тебя не понял? Подмигивающий
Если ячейка отсутствует - смотри левее. Или я не умею объеденять ячейки или движок...

Цитата: DenZzz
В таблице "Красивости (новое)" сейчас только одна буква "я" и пробел. Может, сразу расписать кодировку всех символов в верхнем и нижнем регистре?
шутишь их там 66 Улыбка

Цитата: DenZzz
Собственно, можешь приаттачить к посту файл в формате Excel или Word, чтобы не мучаться с таблицами в BB-коде...
угу, когда очищу от BB-шек
Сообщить модератору   Записан
Сергей
Beta tester
*****

Репутация: +9/-2
Offline Offline

Сообщений: 621



« Ответ #68 : 12 марта 2007, 11:52:07 »

Опциональное кодирование регистра безусловно нужно. Пусть будет для выборочных сайтов. И хотелось бы, чтобы ударение добавлялось только в случае конфликтов, когда одноименный файл уже есть в папке. Аналогично тому как сейчас разрешаются конфликты файлов и папок. Надеюсь, это возможно.
Сообщить модератору   Записан
v0lt
Beta tester
*****

Репутация: +7/-0
Offline Offline

Сообщений: 127


« Ответ #69 : 12 марта 2007, 19:32:17 »

DenZzz
выкладываю таблицу, там основная часть и декодирование кирилицы (см. лист 2)
(коды #' #) #( #} #{ пока не вносил)

Сергей
Цитировать
И хотелось бы, чтобы ударение добавлялось только в случае конфликтов, когда одноименный файл уже есть в папке. Аналогично тому как сейчас разрешаются конфликты файлов и папок. Надеюсь, это возможно.
В принципе возможно, но муторно и медленно.

* URL2filename_base&rus.xls (28 Кб - загружено 72 раз.)
« Последнее редактирование: 12 марта 2007, 20:18:58 от v0lt » Сообщить модератору   Записан
popkov
Beta tester
*****

Репутация: +3/-0
Offline Offline

Сообщений: 349


« Ответ #70 : 12 марта 2007, 21:15:52 »

Не знаю чего сказать, ну не нравиться мне %22->##. Если бы уж очень понадобилось %23->##, я может и согласился (по другому тут глупо кодировать). В принципе обратное преобразовние в URL особо не усложняется (всего то поставить s:=StringReplace(s,'##','%22',[rfReplaceAll]) в самое начало функции), но только из-за прозрачности, не знаю, не знаю... внуть кеша не каждый полезет, проще в Историке найти нужное (обычно)
Тогда предлагаю вариант получше - кодировать двойную кавычку двумя символами ударения, идущими подряд: "``".
Вариант, по-моему, более чем удачный. Конфликтов с кодированием заглавных букв не будет - там не может идти подряд два символа ударения.
2popkov По поводу неразвывного пробела (символ 0160). Напрягает, то что его номер больше 127, поэтому на некоторых системах он может выглядеть по другому, для спец кода это плохо.
В каких системах он выглядит иначе? Есть ли вообще такие системы? Уверен, под всеми версиями Win он выглядит одинаково - как пробел.
Еще возможно путаница (выглядит как пробел) и есть проблемы ручного редактирования. Обратная ковычка поудобнее будет.
Может быть. Но тогда предлагаю в разделе "Решение проблем" решать их не с помощью комбинации "#n" - а с помощью куда более подходящего для этих случаем символа неразрывного пробела!
То есть, я предлагаю следующее:
Редирект и решение проблем
строка0.98b1замена
редиректредирект#mредирект#m
".\"". \"
"пробел\"" \"
"путь\"путь\#_"путь\#_" или "путь\ "
"путь.""путь. "
"путьпробел""путь "
Во всех этих случаях я предлагаю обходить ограничения на использование пробелов и точек в именах файлов через неразрывный пробел, на который они не распространяются! Все видимые пробелы в таблице - это неразрывные пробелы! Согласитесь, что такое представление не только короче, но и гораздо нагляднее и более удобочитаемо!
По-моему, неразрывный пробел для наших целей чрезвычайно удобен. Давайте, что ли, протестируем, может ли он создавать какие-то глюки вообще? Я сомневаюсь. Единственный недостаток, который я заметил при работе с ним - если его скопировать в буфер обмена "в формате RTF" (например, из Word) или "в виде HTML" (с вэб-страницы), то при конвертации в Plain Text винда зачем-то заменяет его на простой пробел. Этого не происходит, если с самого начала копировать как Plain Text (например, из Блокнота или, редактируя имя файла в Проводнике, содержащее неразрывный пробел - можно копировать и вставлять сколько угодно, никаких проблем я не заметил).
« Последнее редактирование: 12 марта 2007, 21:43:20 от popkov » Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #71 : 12 марта 2007, 23:22:41 »

выкладываю таблицу, там основная часть и декодирование кирилицы (см. лист 2)

О.К. Только колонка "после "?" опять не везде была заполнена - подправил. Подмигивающий

Еще добавил в декодирование кириллицы кодировку Win-1251.
Например, URL:  http://www.yandex.ru/yandsearch?text=%CF%F0%E8%EC%E5%F0
корректно открывается во всех браузерах и хотелось бы в кэше видеть "прозрачную" кириллицу, а не коды...

Мы же собираемся ради "красивости" декодировать UTF-8, типа:
http://www.yandex.ru/yandsearch?text=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80
Чем Win-1251 хуже? Подмигивающий

* URL2filename.zip (6.67 Кб - загружено 46 раз.)
Сообщить модератору   Записан
popkov
Beta tester
*****

Репутация: +3/-0
Offline Offline

Сообщений: 349


« Ответ #72 : 12 марта 2007, 23:41:00 »

Еще добавил в декодирование кириллицы кодировку Win-1251.
Например, URL:  http://www.yandex.ru/yandsearch?text=%CF%F0%E8%EC%E5%F0
корректно открывается во всех браузерах и хотелось бы в кэше видеть "прозрачную" кириллицу, а не коды...
Грамотно!      


Только при кодировании заглавных букв, я думаю, не стоит менять их регистр - пускай остаются заглавными! Просто перед каждой заглавной буквой будет стоять соотв. символ - знак ударения или неразрывный пробел (это уж - отчасти дело вкуса, отчасти - вопрос универсальности неразрывного пробела, который, судя по моим экспериментам, вполне безопасен для использования в именах файлов).

Ну и насчёт двойной кавычки  - всё же считаю нужным кодировать её максимально прозрачно как два символа ударения: "``".

Да и символы "<>" можно бы попроще записать как "#{" и "#}" соответственно. А можно - и того проще, записать их как " {" и " }" (неразрывный пробел + {}), соответственно. Улыбка
« Последнее редактирование: 13 марта 2007, 00:02:32 от popkov » Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #73 : 13 марта 2007, 00:31:30 »

Только при кодировании заглавных букв, я думаю, не стоит менять их регистр - пускай остаются заглавными!
Ну и насчёт кавычки  - всё же считаю нужным кодировать её максимально прозрачно как два символа ударения: "``".
Да и символы "<>" можно бы попроще записать как "#{" и "#}" соответственно.

Ничего не имею против - это не помеха для обратного преобразования filename -> URL.

Единственная заметка, что перекодировать придется не только сами "<> в URL-ах IE, но и их коды в других браузерах, чтобы не плодить в кэше одинаковые файлы с разными именами.

Цитировать
По-моему, неразрывный пробел для наших целей чрезвычайно удобен.

А вот использовать "неразрывный пробел" мне не очень нравится!
Во-первых, потому что визуально он ничем не отличается от обычного, что может создать неудобство для пользователя, который захочет открыть файл в сторонней программе, набрав вручную его имя. Естественно, он вряд ли сам догадается, что там используется "неразрывный пробел".
Во-вторых, как ты уже озвучил, его очень не просто ввести с клавиатуры (надо помнить код) и нельзя скопировать из наглядного в этом плане Word-а.
В общем, использование "неразрывного пробела" затруднит ручную правку имен файлов и ручной ввод их в сторонних программах!
Сообщить модератору   Записан
v0lt
Beta tester
*****

Репутация: +7/-0
Offline Offline

Сообщений: 127


« Ответ #74 : 13 марта 2007, 06:58:58 »

popkov
Цитировать
Тогда предлагаю вариант получше - кодировать двойную кавычку двумя символами ударения, идущими подряд: "``".
все лучше и лучше Улыбка вспомним с чего все начиналось
%22 -> #' -> ## -> ``
Последний вариант конечно наглядный, но мне и %22 никак не мешает Улыбка Но ближе к теме, #' - очень логичный и удобный код для программирования. ## - растут сомнения (а зачем?), но сделать можно.
Теперь о "``". У меня даже сомнения стали возникать, стоит ли использовать символ ` как специальный (см. кодирование регистра), почти наравне с великим # Улыбка
Этот символ входит в "группу" символов (пробел"#<>`), которые нельзя использовать в урле явно, но при этом имеются на любой клавиатуре (во как Улыбка). И вдруг найдется такой же настырный человек, который будет лобировать %60 -> ` И тут даже возразить нечего, как и "пробел" его не требуется кодировать, чтобы создать такой файл.
Ладно посмотрим, что другие форумчане скажут.

Цитировать
Во всех этих случаях я предлагаю обходить ограничения на использование пробелов и точек в именах файлов через неразрывный пробел, на который они не распространяются!
Попробую возразить вашей же читатой - "под всеми версиями Win он выглядит одинаково - как пробел."

Я тут попробовал насоздавать папки файлы состоящие только из неразрывных пробелов. Зрелище страшное Прикольно (можно прикалываться над бедными чайниками) Есть подозрение, что спецы из мелкосовта когда писали ограничение на обычный пробел, забыли про неразрывной. Попробуй в командной строке через команду DIR узнать сколько неразрывных пробелов стоит в конце имени папки/файла. А если в имени намешать оба типа пробела, то ваще пипец...

Что-то мне припоминается глюк в каком-то продукте MS связанный как раз с неразрывном пробелом

PS: Разделение кода #_ и #n для файлов и папок я вводил не просто так. Я попробую проработать вариант без #n, потом отпишусь для чего это надо...
Сообщить модератору   Записан
v0lt
Beta tester
*****

Репутация: +7/-0
Offline Offline

Сообщений: 127


« Ответ #75 : 13 марта 2007, 07:05:42 »

DenZzz
Цитировать
Чем Win-1251 хуже?
не стандарт, а глюк фокса
нельзя однозначно написать алгоритм декодирубщий одновременно и уникод и Win-1251.
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #76 : 13 марта 2007, 07:50:10 »

Цитировать
Чем Win-1251 хуже?
не стандарт, а глюк фокса
нельзя однозначно написать алгоритм декодирубщий одновременно и уникод и Win-1251.

Я не про глюк Фокса! Зайди на http://www.yandex.ru/ в Опере, набери в поле ввода русский текст и нажми "Найти" - получишь URL с кодами символов в Win-1251, который сервер понимает и возвращает результаты поиска!

Собственно, также без проблем сервер понимает и тот же самый текст, но в UTF-8 - примеры приводил выше!

А раз сервер смог без проблем опознать кодировку, то HC можно попробовать этому обучить!
Видимо, придется сделать допущение, что в URL может находиться одновременно только одна кодировка, и исходя из этого, декодировать символы по той или иной таблице.
Также, видимо, следует сохранять в имени файла признак кодировки кириллицы для возможности обратного преобразования filename -> URL...
Сообщить модератору   Записан
popkov
Beta tester
*****

Репутация: +3/-0
Offline Offline

Сообщений: 349


« Ответ #77 : 13 марта 2007, 07:57:42 »

Во-вторых, как ты уже озвучил, его очень не просто ввести с клавиатуры (надо помнить код) и нельзя скопировать из наглядного в этом плане Word-а.
В общем, использование "неразрывного пробела" затруднит ручную правку имен файлов и ручной ввод их в сторонних программах!
Ручной ввод имени файла - сделает крайне неудобным, это правда. Другое дело, что мне это никогда не было нужно (поэтому даже в голову не пришло). Мало кому это может быть нужно, но для универсальности можно и правда тогда ограничиться символом ударения для кодирования заглавных букв.
« Последнее редактирование: 13 марта 2007, 08:09:01 от popkov » Сообщить модератору   Записан
Сергей
Beta tester
*****

Репутация: +9/-2
Offline Offline

Сообщений: 621



« Ответ #78 : 13 марта 2007, 12:05:44 »

DenZzz
Цитировать
Чем Win-1251 хуже?
Тем, что мы не знаем наверняка, какая там кодировка на самом деле. Мы что, создаем прокси только для русских? Вдруг буржуи тоже захотят пользоваться этой программой. Не навязывать же всем WIN. Да и в россии может встретиться сайт с KOI-8.

Если и делать преобразование, то в имени файла обязательно надо сохранить информацию о кодировке. Например так #?KOI8-R?Пример

Это тебе повезло, что Яндекс понимает и WIN и UTF-8
А попробуй такой URL
http://forum.ru-board.com/forum.cgi?action=filter&forum=35&filterby=topictitle&word=Пример
Браузер добросовестно закодирует в юникод
http://forum.ru-board.com/forum.cgi?action=filter&forum=35&filterby=topictitle&word=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80
а сервер этого не поймет.

popkov
Неразрывный пробел это символ Юникода с кодом 00A0. Я категорически против его использования. Юниксовые файловые системы у нас, кстати, по умолчанию, монтируются в кодировке KOI-8 и такого символа там нет Подмигивающий
FAR понимает неразрывный пробел? У него плохо с поддержкой Юникода. Зачем лишние проблемы создавать?
« Последнее редактирование: 13 марта 2007, 13:01:04 от Сергей » Сообщить модератору   Записан
popkov
Beta tester
*****

Репутация: +3/-0
Offline Offline

Сообщений: 349


« Ответ #79 : 13 марта 2007, 14:17:43 »

Юниксовые файловые системы у нас, кстати, по умолчанию, монтируются в кодировке KOI-8 и такого символа там нет Подмигивающий
Не знал... Что ж, тогда спорить не о чем.
Сообщить модератору   Записан
Страниц: 1 2 3 [4] 5 6 ... 13   Вверх
  Отправить эту тему    Печать  

 
Перейти в: