gpt4 book ai didi

php - 像 base36 一样编码,包括大写

转载 作者:可可西里 更新时间:2023-11-01 12:50:23 26 4
gpt4 key购买 nike

我正在使用 base36 来缩短 URL。我有一个博客条目的 ID,并将该 ID 转换为 base36 以使其更小。 Base36 仅包含小写字母。如何包含大写字母?如果我使用 base64_encode,它实际上会使字符串变长。

最佳答案

您可以在这两篇文章中找到用于创建包含字母(小写和大写)和数字的短网址的源代码示例,例如:

这是第二篇文章(引用)中使用的代码部分:

$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, ($n % $base), 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

关于php - 像 base36 一样编码,包括大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1481173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com