将URL编码为安全的文件名字符串

Encode URLs into safe filename string

本文关键字:文件名 字符串 安全 URL 编码      更新时间:2023-10-16

我正在编写一个简单的C++类,我想在其中缓存从web下载的图像的图片缩略图版本。因此,我想使用一个散列函数,它接收URL字符串并输出一个适合作为文件名的唯一字符串。

有没有一种简单的方法可以在不重新编写函数的情况下做到这一点?我四处寻找一个简单的图书馆,但什么也找不到。这当然是一个常见的问题。

在类似的情况下,我用十六进制对密钥的字节进行了编码(在您的例子中,密钥是URL的哈希)。这使大小增加了一倍,但很简单,避免了文件系统损坏字符时可能出现的任何问题,并按照与原始键相同的顺序进行排序。

(最初我尝试了一种稍微花哨、更高效的编码,我认为它可以避免任何有问题的字符,但OSX的文件系统比我想象的更疯狂。)

一种更简单的方法是用下划线替换所有不是字符或数字的内容。

编辑:这是一个简单的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] = '_';
    }
}

boost::hash怎么样?