Главная
Форум
Контакты
Купить
Поддержи проект
Поиск
Искать:
Расширенный поиск
[Закрыть]
Правила форума
Войти
Регистрация
Russian
English
HandyCache форум
Главная категория
»
Общие вопросы
»
Алгоритм преобразования URL в имя файла в кэше
Имя пользователя:
1 час
1 день
1 неделя
1 месяц
Навсегда
Пароль:
Страниц: [
1
]
2
3
...
13
Вниз
« предыдущая тема
следующая тема »
Отправить эту тему
Печать
Автор
Тема: Алгоритм преобразования URL в имя файла в кэше (Прочитано 237732 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Сергей
Beta tester
Репутация: +9/-2
Offline
Сообщений: 621
Алгоритм преобразования URL в имя файла в кэше
«
:
12 января 2007, 15:39:16 »
В документации не хватает подробного описания алгоритма преобразования URL2File.
Со всеми ньюансами, типа работы с дополнительными папками кэша.
Сообщить модератору
Записан
Дем
Постоялец
Репутация: +6/-3
Offline
Сообщений: 167
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #1 :
12 января 2007, 16:31:32 »
Цитата: Сергей от 12 января 2007, 15:39:16
В документации не хватает подробного описания алгоритма преобразования URL2File.
Со всеми ньюансами, типа работы с дополнительными папками кэша.
Ну вот что экспериментально нашёл:
: !
/ #%
// #%~
\ #~
| #i
* #x
? #^
Сообщить модератору
Записан
Сергей
Beta tester
Репутация: +9/-2
Offline
Сообщений: 621
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #2 :
13 января 2007, 14:07:56 »
DenZzz
Цитировать
но это уже частность...
Не соглашусь. Способ хранения кэша ключевой момент программы отличающий ее от конкурентов.
Поэтому я просил выложить в паблик алгоритм преобразования чтобы всем вместе его обсудить, найти недоработки и исправить их до финала.
Как говорится
Цитировать
Лучше один раз сделать правильно, чем потом переделывать.
Сообщить модератору
Записан
DenZzz
Модератор
Репутация: +179/-11
Offline
Сообщений: 5589
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #3 :
13 января 2007, 14:30:39 »
Сергей
Цитировать
Поэтому я просил выложить в паблик алгоритм преобразования чтобы всем вместе его обсудить, найти недоработки и исправить их до финала.
К сожалению, не владею полной информацией по этому вопросу...
Если кто может точно описать этот алгоритм словами - давайте.
Помнится,
V0lt
с ру-борда разбирался в коде и даже конвертор кэша написал...
Сообщить модератору
Записан
mai62
Автор HC
Репутация: +226/-4
Offline
Сообщений: 6383
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #4 :
13 января 2007, 22:51:57 »
Сергей
Цитировать
Поэтому я просил выложить в паблик алгоритм преобразования чтобы всем вместе его обсудить, найти недоработки и исправить их до финала.
Смотри вложение
URLToCache.pas
(15.71 Кб - загружено 325 раз.)
Сообщить модератору
Записан
DenZzz
Модератор
Репутация: +179/-11
Offline
Сообщений: 5589
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #5 :
14 января 2007, 01:37:10 »
Сергей (aka Сергей Кузнецов, ака COUSIN)
Цитата из ToDo:
Цитировать
Предлагаю тогда "!" тоже заменять на что-нибудь другое. Чтобы устранить неоднозначности. (C0USIN)
Судя по
URLToCache.pas
, это предложение уже реализовано!
! заменяется на #I
Сообщить модератору
Записан
DenZzz
Модератор
Репутация: +179/-11
Offline
Сообщений: 5589
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #6 :
14 января 2007, 01:58:21 »
Как мы уже заметили в
смежной теме
, в действующем алгоритме символы:
" < >
- никак не преобразуются в имя файла, т.е. файл на диске просто не создается! Хорошо бы это поправить.
Еще надо решить, на что их заменять...
А кто помнит, почему некоторые "небезопасные" символы было решено заменять не на их код
%хх
, а на комбинацию:
#y
?
«
Последнее редактирование: 14 января 2007, 02:35:59 от DenZzz
»
Сообщить модератору
Записан
Дем
Постоялец
Репутация: +6/-3
Offline
Сообщений: 167
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #7 :
14 января 2007, 17:54:07 »
Кусок из моего...
Код:
Private Function URL2FName(ByVal Url As String) As String
Dim s As String
If Url.EndsWith("/") Then Url &= DefFName
URL2FName = Url.Replace("?", "^/").Replace("%3f", "^/").Replace("<", "#(").Replace(">", "#)").Replace("""", "#'").Replace("*", "#x").Replace("!", "#I").Replace(":", "!").Replace("|", "#i")
If (MenuRepSl.Checked) Then
Dim iq As Integer = URL2FName.IndexOf("^/") + 2
If (iq >= 2 And URL2FName.Length > iq) Then
URL2FName = URL2FName.Substring(0, iq) & URL2FName.Substring(iq).Replace("^/", "#^").Replace("//", "#%~").Replace("/", "#%").Replace("\", "#~")
End If
End If
End Function
Но конечно выбор символа - дело автора.
Мне больше нравится § (критерий выбора - почти не встречается в урл, а также одинаково выглядит в ANSI и OEM)
«
Последнее редактирование: 14 января 2007, 18:11:43 от Дем
»
Сообщить модератору
Записан
Кирилл
Beta tester
Репутация: +5/-1
Offline
Сообщений: 124
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #8 :
16 января 2007, 14:46:50 »
Хм. А нельзя ли вынести правило преобразования "URL - имя файла в кеше" в файл настроек?
Сообщить модератору
Записан
Сергей
Beta tester
Репутация: +9/-2
Offline
Сообщений: 621
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #9 :
16 января 2007, 15:13:13 »
Я уже предлагал такое.
Алгоритм слишком сложный, чтобы его через файл настроек описать.
И медленно будет работать тогда.
Сообщить модератору
Записан
Кирилл
Beta tester
Репутация: +5/-1
Offline
Сообщений: 124
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #10 :
16 января 2007, 15:26:36 »
2 Сергей
Цитировать
Я уже предлагал такое.
Алгоритм слишком сложный, чтобы его через файл настроек описать.
И медленно будет работать тогда.
Немного странно. Собственно список "Преобразование URL" можно заставить делать практически то же самое.
Сообщить модератору
Записан
Сергей
Beta tester
Репутация: +9/-2
Offline
Сообщений: 621
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #11 :
16 января 2007, 15:39:51 »
Там не просто замена в URL некоторых символов.
Еще много других операций. Без обращения к диску никак не обойтись.
Например может оказаться что имя файла совпадает с именем каталога.
Еще есть две папки кэша, переадресация, докачка ....
«
Последнее редактирование: 16 января 2007, 16:11:29 от Сергей
»
Сообщить модератору
Записан
Кирилл
Beta tester
Репутация: +5/-1
Offline
Сообщений: 124
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #12 :
19 января 2007, 09:37:22 »
Для получения относительного пути файла в кеше регулярные выражения вполне подойдут.
Ну а разрешение коллизий конечно лучше всего программное.
Сообщить модератору
Записан
mai62
Автор HC
Репутация: +226/-4
Offline
Сообщений: 6383
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #13 :
19 января 2007, 12:15:46 »
Кирилл
Цитировать
А нельзя ли вынести правило преобразования "URL - имя файла в кеше" в файл настроек?
И будет полная анархия, несовместимость кэшей и куча вопросов почему у меня что-то не кэшируется.
Сообщить модератору
Записан
Кирилл
Beta tester
Репутация: +5/-1
Offline
Сообщений: 124
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #14 :
19 января 2007, 12:21:26 »
2 mai62
Ну для полной анархии при кривых руках и текущих настроек хватит
Собственно список "Преобразование URL" обладает тем же ресурсом для "Cache hell"
Сообщить модератору
Записан
Сергей
Beta tester
Репутация: +9/-2
Offline
Сообщений: 621
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #15 :
27 февраля 2007, 23:47:46 »
popkov
Цитировать
никак не уясню, почему один символ кодируется двумя кодами с "%", идущими подряд?
И ещё более непонятно, почему тогда можно то же закодировать одним кодом с "%", и это всё равно будет правильно обработано и будет означать то же самое (я имею в виду описанные мной выше два способа кодирования, один из которых в два раза короче другого)?
Однобайтовые коды неоднозначны. Одной и той же букве могут соответствовать разные коды, в зависимости от того, какую кодовою таблицу мы подразумеваем Win, koi-8, dos ...
Юникод решает эту проблему. Двухбайтовые коды, в данном случае, это UTF-8
Вот цитата с
http://ru.wikipedia.org/wiki/
Юникод
Цитировать
UTF-8 — это представление Юникода, обеспечивающее наилучшую совместимость со старыми системами, использовавшими 8-битные символы. Текст, состоящий только из символов с номером меньше 128, при записи в UTF-8 превращается в обычный текст ASCII. И наоборот, в тексте UTF-8 любой байт со значением меньше 128 изображает символ ASCII с тем же кодом. Остальные символы Юникода изображаются последовательностями длиной от 2 до 6 байтов (на деле, только до 4 байт, поскольку использование кодов больше 221 не планируется), в которых первый байт всегда имеет вид 11xxxxxx, а остальные — 10xxxxxx.
«
Последнее редактирование: 27 февраля 2007, 23:52:38 от Сергей
»
Сообщить модератору
Записан
popkov
Beta tester
Репутация: +3/-0
Offline
Сообщений: 349
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #16 :
27 февраля 2007, 23:59:53 »
Цитата: Сергей от 27 февраля 2007, 23:47:46
popkov
Однобайтовые коды неоднозначны. Одной и той же букве могут соответствовать разные коды, в зависимости от того, какую кодовою таблицу мы подразумеваем Win, koi-8, dos ...
Юникод решает эту проблему. Двухбайтовые коды, в данном случае, это UTF-8
Вот цитата с
http://ru.wikipedia.org/wiki/
Юникод
Но всё равно непонятно - почему тогда сервер вернул двухбайтовый код, запросто сделав его из однобайтового? Он воспользовался информацией о языке вэб-страницы для этого?
Сообщить модератору
Записан
Сергей
Beta tester
Репутация: +9/-2
Offline
Сообщений: 621
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #17 :
28 февраля 2007, 00:05:11 »
Цитировать
А кто помнит, почему некоторые "небезопасные" символы было решено заменять не на их код %хх , а на комбинацию: #y ?
По моему решение так и не было принято. Это личная инициатива автора.
Мне больше нравится вариант %xx для таких символов.
Сообщить модератору
Записан
Сергей
Beta tester
Репутация: +9/-2
Offline
Сообщений: 621
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #18 :
28 февраля 2007, 00:17:41 »
Цитата: popkov от 27 февраля 2007, 23:59:53
Но всё равно непонятно - почему тогда сервер вернул двухбайтовый код, запросто сделав его из однобайтового? Он воспользовался информацией о языке вэб-страницы для этого?
Сервер увидел неправильные коды и попытался восстановить их, предположив, что это WIN.
Сообщить модератору
Записан
v0lt
Beta tester
Репутация: +7/-0
Offline
Сообщений: 127
Re: Алгоритм преобразования URL в имя файла в кэше
«
Ответ #19 :
28 февраля 2007, 19:11:14 »
Вот я наконец-то на этом форуме
Цитата: DenZzz от 14 января 2007, 01:37:10
Судя по
URLToCache.pas
, это предложение уже реализовано!
! заменяется на #I
кхм, оно конечно более совместимо, но больше нравился вариант когда ! не трогается, а меняется ":" на "#I"
Цитата: DenZzz
А кто помнит, почему некоторые "небезопасные" символы было решено заменять не на их код %хх , а на комбинацию: #y ?
для надежности и упрошения. в разных частях урла можно использовать разные комбинации символов. Например после "?" не обязательно кодировать символы запрешенные в host или path. К тому же в урле после "?" можно либо все закодировать, либо то что необходимо, и по сути получив два разных урла...
Цитата: popkov
пост с руборда:
Кстати, хотелось бы всё-таки узнать, что сейчас происходит с символами кавычек и <> при записи их на диск - они просто отбрасываются? И что будет с этой ситуацией в дальнейшем? Есть ли ещё такие символы?
Цитата: DenZzz
пост с руборда:
Нет, когда есть эти символы, то файл на диск не пишется совсем! Это баг...
двойные кавычки и <> в урле не могут исползоваться поэтому они кодируются браузером (%22 %3C %3E) и следовательно HC такие урлы нормально сохранит (можете проверить)
Цитата: popkov
пост с руборда:
Очень хотелось бы разобраться с двумя способами кодирования, один из которых в два раза короче
Тот что длинный %xx%xx, это как я понял UTF-16. Причем первый %xx должен быть больше %7F иначе будет распознан как ASCII символ.
Запрещеные символы ASCII (первые 128) кодируся как %xx, где xx - 16-ричный номер символа.
Короткий способ - это глюк (?) Firefox. Там вообще хх - это номер в cp1251. Я могу лишь предположить, что сервер wiki самостоятельно переводит к нормальному виду:
- браузер сообщяет желаемую кодировку и сервер это учитывает (очень сомнительно);
- сайт на русском, и урлы как правило на русском, следовательно програмисты движка сайта режили облегчить жизнь обычным пользователям
Сообщить модератору
Записан
Страниц: [
1
]
2
3
...
13
Вверх
Отправить эту тему
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Главная категория
-----------------------------
=> Общие вопросы
=> Новые предложения
=> Дополнения, плагины
=> Сжатие трафика
=> English forum
=> Indonesian forum
-----------------------------
Гостевая
-----------------------------
=> Гостевая
-----------------------------
Дела домашние
-----------------------------
=> Сайт и форум HandyCache
=> Курилка
© 2006-2014 HandyCache Team. Все права защищены.
Загружается...