我使用base36来缩短网址.我有一个博客条目的id并将该id转换为base36以使其更小. Base36只包含小写字母.如何包含大写字母?如果我使用base64_encode它实际上使字符串更长.
谢谢,
马克斯
你可以找到源代码的例子来创建包含字母(小写和大写)的短网址和这两篇文章的编号,例如:
原文链接:https://www.f2er.com/php/240169.html> Create short IDs with PHP – Like Youtube or TinyURL
> Building a URL Shortener
$codeset = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; $base = strlen($codeset); $n = 300; $converted = ""; while ($n > 0) { $converted = substr($codeset,($n % $base),1) . $converted; $n = floor($n/$base); } echo $converted; // 4Q
你可以很容易地将它封装在一个函数中 – 唯一需要考虑的是$n将作为参数接收:
function shorten($n) { $codeset = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; $base = strlen($codeset); $converted = ""; while ($n > 0) { $converted = substr($codeset,1) . $converted; $n = floor($n/$base); } return $converted; }
并以这种方式调用它:
$id = 123456; $url = shorten($id); var_dump($url);
你得到 :
string 'w7e' (length=3)
(如果需要,您还可以添加一些其他字符 – 具体取决于您希望在URL中获得的内容)
评论后编辑:
通过阅读第二篇文章(我从中获得了缩短代码),您将找到执行非缩短的代码.
将该代码封装在函数中不应该那么难,并且可能会得到这样的结果:
function unshorten($converted) { $codeset = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; $base = strlen($codeset); $c = 0; for ($i = strlen($converted); $i; $i--) { $c += strpos($codeset,substr($converted,(-1 * ( $i - strlen($converted) )),1)) * pow($base,$i-1); } return $c; }
并用缩短的url调用它:
$back_to_id = unshorten('w7e'); var_dump($back_to_id);
会得到你:
int 123456