3

我不知道如何在 PHP 中以最佳方式执行以下操作:在数据库中,我有具有唯一 ID 的消息,例如 19041985。现在,我想在短 url 服务中引用这些消息,但不使用生成的哈希但只需“计算”原始 ID。

换句话说,例如:http://short.url/sYsn7应该让我计算访问者想要请求的消息 ID。

为了让它更明显,我在 PHP 中编写了以下代码来生成这些“字母数字 ID 版本”,当然,反过来让我计算原始消息 ID。

问题是:这是做到这一点的最佳方式吗?我几乎不这么认为,但想不出别的。

$alphanumString = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_';
for($i=0;$i < strlen($alphanumString);$i++)
{
 $alphanumArray[$i] = substr($alphanumString,$i,1);
}



$id = 19041985;

$out = '';
for($i=0;$i < strlen($id);$i++) {

 if(isset($alphanumString["".substr($id,$i,2).""]) && strlen($alphanumString["".substr($id,$i,2).""]) > 0) {
  $out.=$alphanumString["".substr($id,$i,2).""];
 } else {
  $out.=$alphanumString["".substr($id,$i,1).""];
  $out.=$alphanumString["".substr($id,($i+1),1).""];
 }
 $i++;
}

print $out;
4

2 回答 2

1
echo trim(base64_encode(pack("L", 19041987)), "=");
print_r(unpack("L", base64_decode("w44iAQ")));
  • Pack 把数字变成了四个字节,很短但是不可读。
  • Base64_encode 将这四个字节更改为一些更易于人类阅读的字符。
  • 它附加了一些不需要的 = 字符。

如果您执行 base64_encode(19041987),您将获得字符串“19041987”的编码,该编码不短。

于 2010-06-08T12:06:49.083 回答
-1

你不应该在 for 语句中使用函数,因为它在每个循环中都会播放。

例如你的

for($i=0;$i < strlen($alphanumString);$i++)
{
 $alphanumArray[$i] = substr($alphanumString,$i,1);
}

应该

var $alphaLength = strlen($alphanumString);
for($i=0;$i < $alphaLength;$i++)
{
 $alphanumArray[$i] = substr($alphanumString,$i,1);
}
于 2010-06-08T12:13:57.250 回答