如何编码大量(在URL中)?

时间:2009-01-30 23:51:55

标签: http url encoding

通常,人们必须在网址中编码一个大的(例如128或160位)数字。例如,许多Web应用程序对UUID使用md5(random())。

如果您需要将该值放在URL中,常见的方法是将其编码为十六进制字符串。

但显然十六进制编码不是一个非常严格的编码。还有哪些其他方法可以很好地适应URL?

5 个答案:

答案 0 :(得分:6)

我会使用“URL和文件名安全”Base 64 Alphabet。

Base 64使用两个字符集。

Data: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
URLs: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_

要使用base 64,您需要将值填充为3字节长(24位)的倍数,然后将这24位分成4个6位字节。每个6位值按照我上面给出的字符串中的位置进行查找。

如果一切顺利,你的最终base64值将始终是4个字符长的倍数,并解码回3(8bit)字节长的倍数。

根据您使用的语言,很多都内置了编码和解码功能。

答案 1 :(得分:3)

使用base64-url编码(a-z,A-Z,0-9, - 和_ [参见RFC4648第5节])可以做得更好。 RFC4648涵盖了许多不同的编码方法(base16,base32和base64)和一些变体。同样取决于数字中设置的位的稀疏性,您可以想象通过gzip运行它,然后使用所描述的编码方法之一。当然使用gzip实际上取决于你要编码的数量有多大。

答案 2 :(得分:2)

如果你想要它紧,你可以使用base-36编码(从0到Z)。

答案 3 :(得分:0)

使用base36的提示我目前使用类似的东西(在Python中):

>>> str(base64.b32encode(uuid.uuid1().bytes).rstrip('='))
'MTB2ONDSL3YWJN3CA6XIG7O4HM'

答案 4 :(得分:-1)

只需使用十六进制。即使你每个字符得到8位,你仍然使用16-20个字符的随机序列,没有人会想输入或说出来。如果您无法提供短标识符,请使用您的搜索功能。