如何让 URL 变得更短

2018-11-23 13:16:50 +08:00
 daijinming

这里有一个 URL http://elef.top/11918780727494821840.code,其中 11918780727494821840 感觉太长,用什么算法可以把这一堆字符串变得更短,并且还能恢复成原来的字符串

4217 次点击
所在节点    程序员
29 条回复
likuku
2018-11-23 13:21:16 +08:00
各种开源的短域名产品源代码参考下呗,能用现成的短域名服务,那就直接用吧。
sxlzll
2018-11-23 13:21:25 +08:00
google 关键词 短链接 算法
zj9495
2018-11-23 13:21:41 +08:00
http://t.删除 cn/E2Drs42
idtaanlcoe
2018-11-23 13:22:45 +08:00
直接转短链接不就好了?
rayhy
2018-11-23 13:33:45 +08:00
楼主需要的应该是压缩算法而不是短链接那一套吧。

帮楼主试了下 lzma,反而变长了。。
base64.b64encode(lzma.compress(bytes("11918780727494821840",encoding="utf-8"), format=lzma.FORMAT_ALONE, preset=9))

得到:XQAAAAT//////////wAY4OBiO21o/h1HKGV0+oVxG2+9c8sg21/9bgQA
fyyz
2018-11-23 13:36:29 +08:00
这个 url 里最后那段只有数字,可以考虑加上大小写字母,把十进制变成 62 进制
mm163
2018-11-23 13:36:45 +08:00
把数字部分转换成 62 进制或 64 进制,大概可以缩小一半吧。
largecat
2018-11-23 13:37:12 +08:00
md5
hoythan
2018-11-23 13:37:18 +08:00
10 进制转 32 进制

11918780727494821840 => aaq03thd1ji00
hoythan
2018-11-23 13:38:12 +08:00
fyyz
2018-11-23 13:39:14 +08:00
还有,最后的 .code 也太长了,如果一定要标识后缀可以压缩成.c
xy2401
2018-11-23 13:46:54 +08:00
同问。想在 url 里面放 json。压缩一下 分享。有什么比较原生到方法吗? 30%压缩率
Chappako
2018-11-23 13:50:08 +08:00
搜索 hashids
hoythan
2018-11-23 14:04:04 +08:00
@largecat md5 咋还原???????还得建一个数据库吗,建数据库就没有压缩的意义了啊
sutra
2018-11-23 14:23:24 +08:00
10 进制换成 64 进制试试:
import java.math.BigInteger;

import org.apache.commons.codec.binary.Base64;

public class Dec2Base64 {

public static void main(String[] args) {
BigInteger n = new BigInteger("11918780727494821840");
String s = Base64.encodeBase64URLSafeString(n.toByteArray());
System.out.println(s);
System.out.printf("before length: %d, after length: %d\n", n.toString().length(), s.length());

BigInteger n1 = new BigInteger(Base64.decodeBase64(s));
System.out.println(n1);
System.out.println(n.equals(n1));
}

}


AKVoA-xaGcfQ
before length: 20, after length: 12
11918780727494821840
true
xi2008wang
2018-11-23 14:23:56 +08:00
用了一下你的服务,发现还可以通过 id 取查,那不是把别人的也查出来了。。。
daijinming
2018-11-23 14:26:22 +08:00
@Chappako
$id = $hashids->encode(1191878072,7494821840);
var_dump($id);
string(15) "WWZmko6C22VRl7K"
短了 5 位
daijinming
2018-11-23 14:29:06 +08:00
@xi2008wang 这些信息就是用来共享的,没关系的,短地址当天有效,长地址也就是 11918780727494821840 是根据文件 hash 值生成的,没有规律可循
daijinming
2018-11-23 14:30:22 +08:00
@sutra 这个看来是最短了
webdisk
2018-11-23 14:36:12 +08:00
@hoythan
26 是 26 个字母
36 是数字加字母
52 是大小写字母
62 是大小写字母加数字

但是这个 58 是什么意思

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/510728

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX