2008-11-03 42 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的文件系統被證明是比我設想瘋狂。)

相關問題