URL缩短:使用什么编码最好?

3
我正在为我的项目添加一个功能,我们正在生成到我们网站内部内容的链接,并且希望这些链接尽可能短,因此我们将制作自己的“URL缩短器”。
我想知道生成的短链接使用什么编码/字母表最好。这在很大程度上是一个主观问题,我想知道您对最佳方法/权衡的看法。
我考虑了几个选项: - 数字,大写+小写(62进制) - 数字,只有小写(36进制) - 32进制(http://www.crockford.com/wrmg/base32.html) - linkpot.net(使用常见的短英语单词)
当然,后两个选项除了点击之外,在其他用途方面更好,前两个选项则更适合Twitter。
此外,如果我选择“仅可点击”URL,则希望尽可能扩大字母表,添加其他符号。
  • 我能在URL中使用哪些符号而不会被URL编码?
  • 我应该使用哪些符号?其中一些可能会有问题吗?例如斜杠和点。

你认为呢?

注意:这些URL的主要目标是Twitter。考虑到这一点,我们应该尽可能地保留较大的字母表,因为大多数人都会点击链接。但是,我对人们在其他方式中使用短链接(通过电话,在印刷品上等)的经验很感兴趣。这种情况可能发生吗?

注意2:我不是在制作“又一个URL缩短工具”,请不要用投票降低我的评分。我们正在为网站内部事务生成短链接,而不允许任何人缩短任何URL。可以想象,当您生成指向特定坐标的链接时,Google Maps会给您提供短链接。

3个回答

3

我会选择 Base-62,它是最短的。缩短的URL不是供人手动输入的,所以不用担心大小写敏感问题。


2
如果这些URL是“仅可点击的”,我可能会选择base-64编码。 MIME的base-64使用了一些不应使用的字符,但URL中有足够的未保留的安全字符可以替换它们。(此外,你不需要MIME的base-64使用的填充,因为你知道你的URL何时结束。)
这里有一个页面,讨论了一种方法来实现这个:http://fi.am/entry/urlsafe-base64-encodingdecoding-in-two-lines/
如果你想要双重检查,你可以查看RFC2396,找出哪些字符在URI中是安全的。

2
我很想了解更多有关实现的细节。这些URL将如何“还原”,或者被访问的内部页面是否保存为缩短的URL?无论哪种情况,即使您选择使用[A-Z]编码集,只使用3个字符就可以引用26 * 26 * 26 = 17,576个页面;您要讨论多少个内部网页?
总的来说,我会依据您的用例需求来选择正确的编码集。您计划将这些链接用于“除点击之外的其他用途”吗?那些用途是什么,您认为它们会如何改变编码?(例如,在不区分大小写的文件系统上使用URL的某些部分作为文件名会减少可用字符集。) 这里是一篇关于编写URL时可用字符集的信息页面。

感谢您的回答。 在内部,我将由用户创建"实体",每个实体都有一个唯一的整数ID。 然后,我会将这些实体作为缩短的URL公开,以便在Twitter上更加简洁... 所以,您可以使用mydomain.com/1525343或mydomain.com/a4D,对我来说意义是相同的,只是更短而已。 - Daniel Magliola
如果这些将被外部客户使用,我会更倾向于使用更简单的编码范围,比如[0-9a-z]。我不会包括[A-Z],这样用户就可以手动输入URL而不用担心大小写问题。即使像这样有36个字符的范围,你也可以实现大量的缩短。例如,仅5个字符就可以获得60,466,176个唯一的缩短URL。 - fbrereto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接