小编典典

PHP URL缩短算法

algorithm

谁能推荐一种首选的算法来缩短URL?我正在使用PHP进行编码。最初,我考虑编写一些以字符(例如“
a”)开头并遍历请求的内容,在数据库中创建记录,因此必须将字符递增到b,c,d … A,B等。适当。

但是我突然意识到,该算法可能很笨拙,并且可能有更好的方法来实现。

我在Google上读了一些书,有些人似乎是通过数据库ID列中的基本转换来实现的。这不是我太熟悉的东西。

有人可以向我解释一下这将如何工作吗?几个代码示例也很棒。

我显然不想要一个完整的解决方案,因为我想亲自学习,但是仅提供有关此操作方式的解释/伪代码将是极好的。


阅读 606

收藏
2020-07-28

共1个答案

小编典典

大多数缩短服务仅使用一个计数器,该计数器随每个条目递增,并将基数从10转换为64。

PHP中的实现可能如下所示:

function encode($number) {
    return strtr(rtrim(base64_encode(pack('i', $number)), '='), '+/', '-_');
}
function decode($base64) {
    $number = unpack('i', base64_decode(str_pad(strtr($base64, '-_', '+/'), strlen($base64) % 4, '=')));
    return $number[1];
}

$number = mt_rand(0, PHP_INT_MAX);
var_dump(decode(encode($number)) === $number);

所述encode函数接受的整数,将其转换成字节(pack),与基地-64编码(编码它base64_encode),修剪拖尾填充=rtrim),并替换字符+/-_分别(strtr)。该decode函数是encode与之相反的函数,并且功能完全相反(除了添加尾随填充)。

的其他用途strtr是将原始Base-64字母转换为URL和文件名安全字母+并且/需要使用百分比编码进行编码。

2020-07-28