我正在开发一个URL缩短器。输入是一个URL,输出需要是一个4个字符的字符串(字母数字,区分大小写)。
我计算出如果我使用带有区分大小写的字母数字键空间的4个字符,我应该能够存储64 ^ 4(16777216)个URL,直到我的空间不足为止。
我也不希望我的URL缩短器生成任何令人反感的四字母单词的短URL。如果有人制作了一个域名为domain.com/f**k的短网址,那将是不幸的。你得到了照片......
关于最佳方式的任何想法?我觉得我将在这个过程中的某个地方使用base64_encode。
答案 0 :(得分:3)
如果我是你,我会制作一个区分大小写的字母数字增量器。只需递增,并将数字分配给数据库行。要检查坏词,只需检查黑名单。如果它通过,很好。如果没有,只需再次增加。
这样,它们只是按顺序而不是哈希算法。前几个看起来像这样:
id | url
-------------------------
0000 | http://google.com
0001 | http://yahoo.com
0002 | http://example.com
...
000a | http://mail.google.com
000b | http://adobe.com
...
000A | http://microsof.com
...
0010 | http://w3.org
...
00a0 | http://youtube.com
...
00A0 | http://stackoverflow.com
等等。
以下是该功能如何工作的提示: http://us3.php.net/manual/en/function.ord.php
顺便说一句,我的数学可能不对,但我认为是(10 + 26 + 26)^ 4 = 14776336编辑:为了好玩和挑战,我写了一个增量函数。达到最大值时,它返回false,因此在使用它时只需将其与false(使用===)进行比较。
答案 1 :(得分:1)
它模糊地提醒我这个How do I create unique IDs, like YouTube?。您必须确保(在更有限的空间内)检查碰撞的可能性。