2008-11-03 75 views
2

我正在写一个简单的C++类,我希望缓存从网站下载的图片缩略图版本。因此,我想使用一个哈希函数,它接收URL字符串并输出适合作为文件名的唯一字符串。将URL编码为安全的文件名字符串

有没有简单的方法来做到这一点,而不用自己重写函数?我搜索了一个简单的图书馆,但找不到任何东西。这当然是一个普遍的问题。

+0

感谢您的答复。为了简单起见,我想我会坚持使用“下划线”方法。 – 2008-11-03 23:43:13

回答

1

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

编辑:这是在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] = '_'; 
    } 
} 
+4

这似乎太可能导致碰撞。 – erickson 2008-11-03 23:27:23

3

在类似的情况下,我用十六进制编码密钥的字节(在你的情况下,密钥是URL的哈希值)。这会使尺寸加倍,但很简单,避免文件系统出现任何可能的问题,并且会按照与原始密钥相同的顺序进行排序。

(本来我想稍微发烧友,更有效的编码,而且我认为他逃脱了任何问题的字符,但OS X的文件系统被证明是比我设想疯狂。)