我正在研究 URL 缩短器。输入是一个 URL,输出需要是一个 4 个字符的字符串(字母数字,区分大小写)。
我计算得出,如果我使用 4 个字符和区分大小写的字母数字键空间,我应该能够存储 64^4 (16777216) 个 URL,直到我用完空间为止。
我也不希望我的 URL 缩短器生成任何具有冒犯性的四个字母单词的短 URL。如果有人制作了 domain.com/f**k 的短 URL,那将是不幸的。你明白了……
关于解决此问题的最佳方法有什么想法吗?我觉得我会在这个过程中的某个地方使用 base64_encode。
最佳答案
如果我是你,我会制作一个区分大小写的字母数字增量。只需递增,并将数字分配给数据库行。要检查坏词,只需检查黑名单即可。如果它通过了,那太好了。如果不是,则再次递增。
这样,它们就不是哈希算法,而是有序的。前几个看起来像这样:
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(使用===)进行比较即可。
关于php - 在 PHP 中为设置长度 URL 缩短设计一个好的哈希函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4261759/