gpt4 book ai didi

PHP URL 缩短器错误

转载 作者:行者123 更新时间:2023-12-04 04:33:12 24 4
gpt4 key购买 nike

我有这个 PHP 代码,它应该在每个新条目上增加一个 URL 缩短器掩码。
我的问题是当它到达最后一个 (z) 时,它不会附加一个新的字符。
(我知道递增是一个安全问题,因为您可以猜出较早的条目,但这在这种情况下不是问题)

如果我添加 00,它可以计算出 01 等等......但是有没有一个简单的解决方法来解决为什么它不会自己做呢?

(参数是最后一个条目)

<?php

class shortener
{

public function ShortURL($str = null)
{
if (!is_null($str))
{
for($i = (strlen($str) - 1);$i >= 0;$i--)
{
if($str[$i] != 'Z')
{
$str[$i] = $this->_increase($str[$i]);
#var_dump($str[$i]);
break;
}
else
{
$str[$i] = '0';
if($i == 0)
{
$str = '0'.$str;
}
}
}
return $str;
}
else {
return '0';
}
}

private function _increase($letter)
{
//Lowercase: 97 - 122
//Uppercase: 65 - 90
// 0 - 9 : 48 - 57
$ord = ord($letter);
if($ord == 122)
{
$ord = 65;
}
elseif ($ord == 57)
{
$ord = 97;
}
else
{
$ord++;
}
return chr($ord);
}
}

?>

最佳答案

实际上,您所做的只是将数字编码为 Base62。因此,如果我们将字符串解码为基数 10,将其递增,然后将其重新编码为 Base62,则更容易知道我们在做什么,并且字符串的长度将自行处理。

class shortener
{
public function ShortURL($str = null)
{
if ($str==null) return 0;
$int_val = $this->toBase10($str);
$int_val++;
return $this->toBase62($int_val);
}

public function toBase62($num, $b=62) {
$base='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$r = $num % $b ;
$res = $base[$r];
$q = floor($num/$b);
while ($q) {
$r = $q % $b;
$q =floor($q/$b);
$res = $base[$r].$res;
}
return $res;
}

function toBase10( $num, $b=62) {
$base='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$limit = strlen($num);
$res=strpos($base,$num[0]);
for($i=1;$i<$limit;$i++) {
$res = $b * $res + strpos($base,$num[$i]);
}
return $res;
}
}

关于PHP URL 缩短器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20223626/

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