PHP URL缩短算法

谁能推荐一种首选的算法来缩短URL?我正在使用PHP进行编码。最初,我考虑编写一些以字符(例如“

a”)开头并遍历请求的内容,在数据库中创建记录,因此必须将字符递增到b,c,d … A,B等。适当。

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

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

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

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

回答:

大多数缩短服务仅使用一个计数器,该计数器随每个条目递增,并将基数从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和文件名安全字母,+并且/需要使用百分比编码进行编码。

以上是 PHP URL缩短算法 的全部内容, 来源链接: utcz.com/qa/421019.html

回到顶部