有人可以推荐一个首选的算法来使用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编码进行编码.