我不知道如何在 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;
最佳答案
echo trim(base64_encode(pack("L", 19041987)), "=");
print_r(unpack("L", base64_decode("w44iAQ")));
- Pack 将数字改为四个字节,非常短但不可读。
- Base64_encode 将四个字节更改为一些更易于人类阅读的字符。
- 它附加了一些不需要的=字符。
如果你执行 base64_encode(19041987),你会得到字符串“19041987”的编码,它并不短。
关于php - 如何将(大)整数映射到(小尺寸(带有 PHP 的字母数字字符串?(Cantor?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2997041/