![]() |
1
749
我将继续您的“将数字转换为字符串”方法。但是,如果您的ID是 素数大于52 . 理论背景你需要一个 Bijective Function f . 这是必要的,这样你就可以找到一个反函数 g(‘ABC’)=123 为了你 F(123)=ABC 功能。这意味着:
如何将ID转换为缩短的URL
如何将缩短的URL解析为初始ID反过来更容易。你只要用字母表做一个反向查找。
一些实现(由注释者提供) |
![]() |
2
51
为什么要使用哈希? 您可以简单地将自动递增值转换为字母数字值。通过使用一些基本转换,可以很容易地做到这一点。假设字符空间(a-z、a-z、0-9等)有40个字符,将ID转换为以40为基数的数字,并将字符用作数字。 |
![]() |
3
46
|
![]() |
4
31
不是您问题的答案,但我不会使用区分大小写的缩写URL。它们很难记住,通常不可读(许多字体呈现1和L、0和O以及其他非常相似的字符,几乎不可能分辨出区别),并且容易出现完全正确的错误。尽量只使用小写或大写。 另外,请尝试使用一种格式,将数字和字符以预定义的形式混合在一起。有研究表明,人们比其他人更容易记住一种形式(想想电话号码,电话号码按特定形式分组)。尝试类似num char char num char char的方法。我知道这会降低组合,特别是如果你没有大小写,但它会更有用,因此也更有用。 |
![]() |
5
26
我的方法:使用数据库ID,然后 Base36 Encode it . 我不会同时使用大写和小写字母,因为这会使通过电话传输这些URL成为一场噩梦,但您当然可以轻松地将该功能扩展为一个基本的62 en/解码器。 |
![]() |
6
7
这是我的php 5类。
|
![]() |
7
3
C版本:
|
![]() |
8
3
您可以散列整个URL,但如果您只是想缩短ID,请按照Marcel的建议执行。我编写了这个python实现: |
![]() |
9
2
如果你不想重新发明轮子… http://lilurl.sourceforge.net/ |
![]() |
10
2
这是我的版本,适合任何需要它的人。 |
![]() |
11
2
|
![]() |
12
2
node.js和mongodb解决方案因为我们知道MongoDB使用的格式来创建一个12字节的新objectid。
示例(我选择一个随机序列) A1B2C3D4E5F6G7H8I9J1K2L3
因为如果我们将数据存储在同一台机器中,计数器将是唯一的,所以我们可以毫无疑问地得到它是重复的。 所以短网址就是计数器 这里有一个代码片段,假设您的服务器运行正常。
|
![]() |
13
2
我不断增加数据库中每个域的整数序列,并使用 Hashids 将整数编码为URL路径。
我运行了一个脚本,看看它需要多长时间,直到耗尽字符长度。六个字符就可以了
哈希德
可以将URL路径解码回整数,但更简单的解决方案是使用整个短链接
以下是完整的概念:
|
![]() |
14
1
下面是一个不错的PHP URL编码函数…
|
![]() |
15
1
不知道是否有人会发现这一点有用——它更像是一个“hack n slash”方法,但是如果您只需要特定的字符,它很简单并且工作得很好。
|
![]() |
16
0
为什么不把你的ID翻译成字符串呢?您只需要一个函数将介于0和61之间的数字映射到单个字母(大写/小写)或数字。然后应用这个来创建,比如说,4个字母的代码,你就有1470万个URL被覆盖了。 |
![]() |
17
0
这是我使用的:
它非常快,可以用长整数。 |
![]() |
18
0
对于类似的项目,为了获得一个新的键,我在 random string generator 它调用生成器,直到得到一个尚未在哈希表中使用的字符串。一旦您的名称空间开始满了,这个方法就会变慢,但是正如您所说,即使只有6个字符,您也有足够的名称空间可以使用。 |
![]() |
19
0
我有一个不同的问题,因为我存储了许多不同作者的网页,需要通过猜测来防止发现网页。因此,我的短URL为页码的base-62字符串添加了几个额外的数字。这些额外的数字是由页记录本身的信息生成的,它们确保3844个URL中只有1个有效(假设2位数的base-62)。您可以在以下位置看到大纲说明: http://mgscan.com/MBWL . |
![]() |
20
0
很好的答案,我创建了一个bjf的golang实现:
在Github托管: https://github.com/xor-gate/go-bjf |
![]() |
21
0
|
![]() |
22
0
在scala中实现:
scala测试的测试示例:
|
![]() |
23
0
Xeoncross类中的函数
|
![]() |
24
0
你故意省略了O,0和我吗? 我刚刚根据Ryan的解决方案创建了一个PHP类。
|
![]() |
25
0
这里有一个node.js实现,它可能会bit.ly。生成高度随机的七个字符串。 它使用node.js crypto生成高度随机的25个字符集,而不是随机选择7个字符。
|
![]() |
26
0
我的python 3版本
|
![]() |
27
0
有关quality node.js/javascript解决方案,请参见 id-shortener 模块,经过彻底测试,已在生产中使用数月。 它提供了一个高效的ID/URL缩短器,支持可插入存储,默认为 雷迪斯 您甚至可以自定义短ID字符集 幂等元 . 这是一个重要的区别,并不是所有的URL缩短器都要考虑到。 关于这里的其他答案,本模块实现了马塞尔·杰克沃思的上述优秀的公认答案。 解决方案的核心由以下redis lua提供 snippet :
|
![]() |
errerr · htaccess重写引擎URL解释 6 年前 |
![]() |
user1 · 我的htaccess出现500错误 6 年前 |
![]() |
aBlaze · 如何导航到包含\u的URL? 6 年前 |
![]() |
gtershel · Laravel Url两级深 6 年前 |
![]() |
MarcoLe · Angular 5-路由更改url但不导航 6 年前 |