Главная
Форум
Контакты
Купить
Поддержи проект
Поиск
Искать:
Расширенный поиск
[Закрыть]
Правила форума
Войти
Регистрация
Russian
English
HandyCache форум
Главная категория
»
Общие вопросы
»
Алгоритм преобразования URL в имя файла в кэше
Имя пользователя:
1 час
1 день
1 неделя
1 месяц
Навсегда
Пароль:
Страниц:
1
...
3
4
[
5
]
6
7
...
13
Вниз
« предыдущая тема
следующая тема »
Отправить эту тему
Печать
Автор
Тема: Алгоритм преобразования URL в имя файла в кэше (Прочитано 242413 раз)
0 Пользователей и 1 Гость смотрят эту тему.
DenZzz
Модератор
Репутация: +179/-11
Offline
Сообщений: 5589
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #80 :
13 марта 2007, 15:55:53 »
Цитата: Сергей от 13 марта 2007, 12:05:44
Тем, что мы не знаем наверняка, какая там кодировка на самом деле.
Можно попытаться это определить! Наглядный пример - сервер Яндекса, который сам определяет кодировку в запросе!
Коды символов в UTF-8 всегда "двойные" и начинаются с %D0 или %D1 - это можно использовать для определения кодировки в URL-е...
Цитировать
Мы что, создаем прокси только для русских? Вдруг буржуи тоже захотят пользоваться этой программой. Не навязывать же всем WIN.
Пока Россия - это основная целевая аудитория, но, заботясь о будущем, можно вынести перекодировочную таблицу в отдельный файл-список. Тогда каждый иностранец сможет сам задать коды для перекодировки в свой алфавит.
Еще не стоит забывать, что HC работает под Windows и свой WIN есть в каждой локализованной Винде!
На счет KOI-8 - можешь привести реальный рабочий URL, где используется кодировка KOI-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
а сервер этого не поймет.
Во-первых, не каждый браузер перекодирует эту строку в Юникод! Мой отправляет в неизменном виде и получает правильный ответ!
А во-вторых, тот сервер ру-борда не понимает Юникод, но зато прекрасно понимает WIN:
http://forum.ru-board.com/forum.cgi?action=filter&forum=35&filterby=topictitle&word=%CF%F0%E8%EC%E5%F0
Именно в таком виде страница ру-борда отправляет запрос на свой сервер, когда ты фильтруешь там темы в списке!
Кодировка WIN применяется во многих URL и на многих сайтах! Так почему же не хранить подобные URL-ы на диске в "прозрачном", читабельном виде?!
Сообщить модератору
Записан
v0lt
Beta tester
Репутация: +7/-0
Offline
Сообщений: 127
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #81 :
13 марта 2007, 19:13:45 »
DenZzz
Цитировать
Коды символов в UTF-8 всегда "двойные" и начинаются с %D0 или %D1 - это можно использовать для определения кодировки в URL-е...
русская буква "Р" - код D0h
русская буква "С" - код D1h
серверу легче, если получается два варианта, то он может глянуть какая из страниц у него есть.
Цитировать
А во-вторых, тот сервер ру-борда не понимает Юникод, но зато прекрасно понимает WIN:
тут еще проще, сервер на поисковые запросы уже ожидает Win-1251, который генерируется скриптом страницы
Цитировать
Кодировка WIN применяется во многих URL и на многих сайтах! Так почему же не хранить подобные URL-ы на диске в "прозрачном", читабельном виде?!
Можно попробовать сделать опционалное правило для сайтов в урлах которых используется Win-1251.
Сообщить модератору
Записан
popkov
Beta tester
Репутация: +3/-0
Offline
Сообщений: 349
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #82 :
13 марта 2007, 20:56:31 »
Цитата: v0lt от 13 марта 2007, 19:13:45
серверу легче, если получается два варианта, то он может глянуть какая из страниц у него есть.
HC тоже может глянуть, какая страница в кэше уже есть...
Сообщить модератору
Записан
DenZzz
Модератор
Репутация: +179/-11
Offline
Сообщений: 5589
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #83 :
13 марта 2007, 21:09:12 »
Цитата: v0lt от 13 марта 2007, 19:13:45
русская буква "Р" - код D0h
русская буква "С" - код D1h
Это да, но можно пропарсить весь URL, откинув коды спецсимволов, и посмотреть, а не является ли каждый нечетный код D0 или D1. Если является, то проверить "пары" на вхождение в таблицу UTF-8. Так мы с большой степенью вероятности сможем правильно отличить UTF-8 от Win-1251. В общем, это возможно...
Цитировать
серверу легче, если получается два варианта, то он может глянуть какая из страниц у него есть.
Не всегда у сервера есть эта страница, чтобы сверить! Пример с Яндексом я уже приводил:
http://www.yandex.ru/yandsearch?text=%CF%F0%E8%EC%E5%F0
http://www.yandex.ru/yandsearch?text=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80
Оба запроса выводят одинаковый результат поиска, хотя сервер не знал ничего о кодировке критерия поиска! Значит у него есть алгоритм выяснения правильной кодировки!
Цитировать
Можно попробовать сделать опционалное правило для сайтов в урлах которых используется Win-1251.
Можно и так, если не получится прикрутить автораспознание кодировок.
Собственно, в целях борьбы за "гибкость", можно вынести перекодировочные таблицы в отдельный файл в текстовом формате, чтобы его можно было править руками.
Структура перекодировочного файла видится мне примерно такой:
Код:
[UTF-8]
%D0%90 А
...
%D1%8F я
URL=ru\.wikipedia\.org/
URL=...
[WIN-1251]
%C0 А
...
%FF я
URL=+yandex.ru
URL=...
[KOI8-R]
и т.д.
Таким образом, каждый сможет сам править коды символов, добавлять свои кодировочные таблицы (полезно для иностранцев) и задавать сайты, для которых будет применяться та или иная перекодировка.
Сообщить модератору
Записан
Сергей
Beta tester
Репутация: +9/-2
Offline
Сообщений: 621
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #84 :
14 марта 2007, 09:02:19 »
Цитата: DenZzz от 13 марта 2007, 15:55:53
Можно попытаться это определить! Наглядный пример - сервер Яндекса, который сам определяет кодировку в запросе!
Я имел в виду WIN и KOI. Однобайтовую кодировку от юникода отличить легко, разумеется.
Цитировать
Пока Россия - это основная целевая аудитория, но, заботясь о будущем, можно вынести перекодировочную таблицу в отдельный файл-список.
Возможно и так.
Цитировать
Во-первых, не каждый браузер перекодирует эту строку в Юникод! Мой отправляет в неизменном виде и получает правильный ответ!
Ты случайно не кликнул на этой ссылке? Надо было скопировать строку вручную. Форумный движок сам заменил русские буквы на коды.
Цитировать
Кодировка WIN применяется во многих URL и на многих сайтах! Так почему же не хранить подобные URL-ы на диске в "прозрачном", читабельном виде?!
Согласен. При условии сохранения информации о кодировке для возсожности обратного преобразования.
Сообщить модератору
Записан
Сергей
Beta tester
Репутация: +9/-2
Offline
Сообщений: 621
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #85 :
14 марта 2007, 11:03:46 »
Цитировать
можешь привести реальный рабочий URL, где используется кодировка KOI-8 без явного на то указания в самом URL-е?
Не могу сейчас припомнить. Но совершенно точно есть сайты с кодировкой отличной от WIN.
Возможно стоит вытаскивать кодовую страницу из заголовков ответа сервера.
Сообщить модератору
Записан
v0lt
Beta tester
Репутация: +7/-0
Offline
Сообщений: 127
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #86 :
14 марта 2007, 20:18:57 »
пишу алгоритм... дошел до декодирования уникода (%xx%xx) и пробела (%20)
обнаружил неприятность в алгоритме:
Согласно алгоритму после символа "?" имеем / -> #%
если имеем урл вида -
site.com/page.htm?100/20=5
то получим -
site.com\page.htm^\100#%20=5
Если за основными преобразованиями последует декодирование кодов вида %xx, то получим глюки. Придется его ставить в начале
Если сделаем конвертер кеша, который будет преобразовывать %xx согласно поддерживаемым в НС кодировкам, то надо будет не забыть проверку на наличие символа # перед %. Вот такие заморочки...
Еще вариант не использовать #% (совместимость пострадает). Взамен остались #; #, #z или #! (если : -> #=)
Сообщить модератору
Записан
popkov
Beta tester
Репутация: +3/-0
Offline
Сообщений: 349
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #87 :
14 марта 2007, 20:26:52 »
Цитата: v0lt от 14 марта 2007, 20:18:57
Еще вариант не использовать #% (совместимость пострадает). Взамен остались #; #, #z или #! (если : -> #=)
В общем-то, для кодирования слэша "/" комбинация "#!" прозрачнее, чем "#%". Так что поддерживаю! К тому же, для конвертера кэша заменить все вхождения "#%" на "#!" не так уж сложно...
Сообщить модератору
Записан
v0lt
Beta tester
Репутация: +7/-0
Offline
Сообщений: 127
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #88 :
14 марта 2007, 22:51:41 »
Сделал первый вариант кодирования (пока не все фичи)
измения v1.1:
/
->
#!
//
->
\#!
-?-
#!#!
:
->
#=
файлы прилагаются
внутри архива таблица "что и как" и конвертор (нужен dotNetFX 2, идет с некоторыми крупными прогами и игрушками)
Конвектор работает очень просто, вводите урл и видите как он будет выглядеть на диске и как он востанавливается обратно...
URL2filename_ver1_1.zip
(12.14 Кб - загружено 37 раз.)
Сообщить модератору
Записан
DenZzz
Модератор
Репутация: +179/-11
Offline
Сообщений: 5589
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #89 :
14 марта 2007, 23:09:23 »
Цитата: v0lt от 14 марта 2007, 22:51:41
файлы прилагаются
Опять остались пустые ячейки в столбце "после "?" !
Цитировать
внутри архива таблица "что и как" и конвертор (нужен dotNetFX 2, идет с некоторыми крупными прогами и игрушками)
Помнится, раньше ты делал конвертер, работающий без .NET ...
Если менять существующий алгоритм URLToCache, то понадобится конвертер, работающий на всех системах (даже на Win98) и без установленного .NET !
Сообщить модератору
Записан
v0lt
Beta tester
Репутация: +7/-0
Offline
Сообщений: 127
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #90 :
15 марта 2007, 07:01:16 »
DenZzz
Цитировать
Опять остались пустые ячейки в столбце "после "?" !
ну понятно же... (поправил у себя)
DenZzz
Цитировать
Помнится, раньше ты делал конвертер, работающий без .NET ...
Если менять существующий алгоритм URLToCache, то понадобится конвертер, работающий на всех системах (даже на Win98) и без установленного .NET !
было такое, но там был конвертор работающий с самим кешем...
когда дойдет до настоящего конвертора переведу код на Дельфи (наверно за основу возьму предыдущий вариант). сейчас пишу на C#, мне так проще...
PS: Есть Turbo Delphi (BDS2006) на нем можно безпроблемно написать для Win98 или нужен Delphi 7 ?
Сообщить модератору
Записан
Rick
Администратор
Репутация: +15/-1
Offline
Сообщений: 868
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #91 :
15 марта 2007, 07:47:23 »
Цитата: v0lt от 15 марта 2007, 07:01:16
PS: Есть Turbo Delphi (BDS2006) на нем можно безпроблемно написать для Win98 или нужен Delphi 7 ?
Не важно на чем писать - важно какие функции используются.
Сообщить модератору
Записан
Сергей
Beta tester
Репутация: +9/-2
Offline
Сообщений: 621
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #92 :
15 марта 2007, 14:55:07 »
Цитата: DenZzz от 14 марта 2007, 23:09:23
Если менять существующий алгоритм URLToCache, то понадобится конвертер, работающий на всех системах (даже на Win98) и без установленного .NET !
Чем тебе .Net не угодил? Он и под Win98 ставится. Я бы и сам HC под Net не отказался использовать. С совместимостью было-бы намного лучше.
Сообщить модератору
Записан
DenZzz
Модератор
Репутация: +179/-11
Offline
Сообщений: 5589
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #93 :
15 марта 2007, 18:12:34 »
Цитата: Сергей от 15 марта 2007, 14:55:07
Чем тебе .Net не угодил? Он и под Win98 ставится.
1. Тем, что не у всех он есть, а качать только ради конвертера кэша 23 метра Microsoft .NET Framework 2.0/1.1 или даже 50 метров v3.0 тем, кто не имеет безлимитной выделенки и считает каждый МБ, пользуясь HandyCaсhe, - похоже на неудачную шутку...
2. Надо предусмотреть возможность интеграции конвертера в сам HC, если
mai62
сочтет нужным, т.к. это облегчит пользователям переход на новую версию HC, которая написана на Дельфи и самодостаточно работает с любой версией Windows, не имеющей .NET !
Цитировать
Я бы и сам HC под Net не отказался использовать. С совместимостью было-бы намного лучше.
Совместимостью с чем и для чего?
Сообщить модератору
Записан
v0lt
Beta tester
Репутация: +7/-0
Offline
Сообщений: 127
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #94 :
15 марта 2007, 20:09:28 »
Rick
Цитировать
Не важно на чем писать - важно какие функции используются.
ну я бы не сказал, например C# вообще без dotNET не напишешь
был Delphi 8 - это вообще непонятно что, старые проекты не компилятся
Сейчас стоит Turbo Delphi 10 (Borland Developer Studio 2006) вроде нормально, проекты из Delphi 7 запускаются
Всем
Не беспокойтесь, будет конвертор без .NET. Сделаю когда отладим алгоритм и
mai62
дасть добро...
Сообщить модератору
Записан
Rick
Администратор
Репутация: +15/-1
Offline
Сообщений: 868
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #95 :
15 марта 2007, 20:25:07 »
v0lt
Ты спрашивал про D7 и D10 - я про них и отвечал. С# и дотнетовские версии Delphi в вопросе не фигурировали.
Сообщить модератору
Записан
Сергей
Beta tester
Репутация: +9/-2
Offline
Сообщений: 621
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #96 :
16 марта 2007, 11:02:12 »
Цитата: DenZzz от 15 марта 2007, 18:12:34
2. Надо предусмотреть возможность интеграции конвертера в сам HC
Абсолютно верно. Причем еще нужен ручной конвертор. Без него пока сложно использовать список
Преобразование URL
без потери имеющихся в кэше данных.
Цитата: DenZzz от 15 марта 2007, 18:12:34
Совместимостью с чем и для чего?
С Windows Mobile. Чтобы иметь возможность использовать HC и на коммуникаторе.
Сообщить модератору
Записан
v0lt
Beta tester
Репутация: +7/-0
Offline
Сообщений: 127
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #97 :
18 марта 2007, 10:13:31 »
Доработал алгоритм:
измения v1.2:
-Пометка заглавных букв
-Поддержка win-1251
файлы прилагаются
URL2filename_ver1_2.zip
(15.54 Кб - загружено 41 раз.)
Сообщить модератору
Записан
v0lt
Beta tester
Репутация: +7/-0
Offline
Сообщений: 127
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #98 :
19 марта 2007, 07:05:35 »
Так, думаю стоит обсудить проблему длинных урлов.
Эту тему я как-то обсуждал с
mai62
, но в тот момент революция не планировалось, поэтому этот ворпрос был отложен...
Сейчас алгоритм работает так:
На последнем этапе преобразования урла в имя файла проверяется длина имени (относительно папки кеша). Если она больше 200, то мы находим последний символ "\" в пределах первых 192 символов. Строку до символа "\" оставляем, а оставшееся кодируем хешем CRC32:
[путь<192]\[CRC32(путь>192)]
Я предлагаю:
- высчитывать CRC32 на основе URL, а не имени файла. Так будет более однозначный результат и меньше вероятнось потерь при преобразованиях.
(урл брать уже пофиксеный, без багов IE)
- помечать строку хеша. Так будет стразу понятно, что это урл был длинным.
- сделать опцию типа "Для длинных URL сохранять *.url". Возможно кому-то может понадобиться узнать реальный урл.
Алгоритм такой:
Проверяем длину имени (относительно папки кеша). Если она больше 200, то мы находим последний символ "\" в пределах первых 190 символов. Строку до символа "\" оставляем, плюс добавляем помеченный хеш урла без хоста. Помечать предлагаю кодом
#-
:
[путь<190]\#-[CRC32(урл_без_хоста)]
IMHO Хост кодить не надо. Причины: В зависимости от настроек .www может как отбрасываться, так и нет. Иногда сайты меняют хостинг, оставляя структуру, и чтобы ничего не пропало, юзер может просто переименовать соответствующую папку.
+ очень легко реализуемо
+ на CRC практически ничего не влияет
Сообщить модератору
Записан
DenZzz
Модератор
Репутация: +179/-11
Offline
Сообщений: 5589
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #99 :
19 марта 2007, 07:22:49 »
v0lt
Как быть с длинными URL, которые сейчас уже сохранены в кэше?
Переконвертировать их по новому алгоритму не получится, т.к. исходный URL мы восстановить не можем!
Сообщить модератору
Записан
Страниц:
1
...
3
4
[
5
]
6
7
...
13
Вверх
Отправить эту тему
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Главная категория
-----------------------------
=> Общие вопросы
=> Новые предложения
=> Дополнения, плагины
=> Сжатие трафика
=> English forum
=> Indonesian forum
-----------------------------
Гостевая
-----------------------------
=> Гостевая
-----------------------------
Дела домашние
-----------------------------
=> Сайт и форум HandyCache
=> Курилка
© 2006-2014 HandyCache Team. Все права защищены.
Загружается...