Кодировать URL в безопасную строку имени файла - PullRequest
2 голосов
/ 04 ноября 2008

Я пишу простой класс C ++, в котором я хотел бы кешировать уменьшенные копии версий изображений, загруженных из Интернета. Поэтому я хотел бы использовать хеш-функцию, которая принимает строки URL и выводит уникальную строку, подходящую в качестве имени файла.

Есть ли простой способ сделать это без переписывания самой функции? Я искал простую библиотеку, но ничего не смог найти. Конечно, это общая проблема.

Ответы [ 3 ]

3 голосов
/ 04 ноября 2008

В аналогичной ситуации я закодировал байты ключа в шестнадцатеричном формате (где, в вашем случае, ключ является хешем URL). Это удваивает размер, но является простым, позволяет избежать любых возможных проблем в файловой системе, искажающих символы, и сортирует в том же порядке, что и исходный ключ.

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

1 голос
/ 04 ноября 2008

Более простой подход заключается в замене всего, что не является символом или числом, подчеркиванием.

РЕДАКТИРОВАТЬ: Вот наивная реализация в C:

#include <cctype>

char *safe_url(const char *str) {
    char *safe = strdup(str);
    for (int i = 0; i < strlen(str); i++) {
        if (isalpha(str[i]))
            safe[i] = str[i];
        else
            safe[i] = '_';
    }
}
0 голосов
/ 04 ноября 2008

А как насчет boost::hash?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...