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