加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP URL缩短算法

发布时间:2020-12-13 17:28:57 所属栏目:PHP教程 来源:网络整理
导读:有人可以推荐一个首选的算法来使用URL缩短吗?我正在使用 PHP进行编码.最初我考虑写一些从一个字符开始的东西,例如“a”,并遍历请求,在数据库中创建记录,因此必须将字符增加到b,c,d … A,B等适当. 然而,对我来说,这个算法可能相当沉重/笨拙,可能会有更好的方
有人可以推荐一个首选的算法来使用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);

编码函数采用整数,将其转换为字节(pack),用Base-64编码(base64_encode)对其进行编码,修剪尾随填充=(rtrim),分别替换字符和/ by – 和_(strtr) ).解码功能是编码的逆函数,并且完全相反(除了添加尾部填充).

strtr的额外使用是将original Base-64 alphabet转换为URL and filename safe alphabet,并且/需要使用Percentage编码进行编码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读