通常,人们必须在网址中编码一个大的(例如128或160位)数字。例如,许多Web应用程序对UUID使用md5(random())。
如果您需要将该值放在URL中,常见的方法是将其编码为十六进制字符串。
但显然十六进制编码不是一个非常严格的编码。还有哪些其他方法可以很好地适应URL?
答案 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个字符的随机序列,没有人会想输入或说出来。如果您无法提供短标识符,请使用您的搜索功能。