Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >URL短链接实现方法

URL短链接实现方法

原创
作者头像
wangxl
发布于 2018-02-25 02:35:36
发布于 2018-02-25 02:35:36
7.6K1
举报
文章被收录于专栏:PHP在线PHP在线

最近项目开发中,需要实现URL长链接转短链接的需求,于是在网上找了一些资料,顺便整理了下,欢迎有想法的童鞋踊跃留言,我们共同探讨。

一.短链接的好处

  1.内容需要(比如短信,微博中链接字数的限制) 

  2.便于管理(方便后台跟踪点击量,便于统计)

  3.用户友好(看起来很Cool,提升用户体验)

大致思路是定义一个URL映射算法,将长的URL映射到短的URL,使用数据库或者redis缓存存储映射关系,实现映射算法。其中关键部分在于映射算法,接下来我们就详细说下映射算法。

二.映射算法

1.进制转化

多数方案是使用不同进制进行相互转换,比如十进制转十六进制,十进制转六十二进制,即使我们记录了一亿条数据,一亿的64进制为F9eEa同样适合做短链接的参数,将自增长的ID转化为短链接的字符串,长链接短链接以key,value的映射关系存储到数据库或者缓存中,为了更方便的存取。

缺点:没有办法保证转化的短链接字符串的长度,在高并发的情况下,如何保证能够快速分发是个问题。

2.固定算法

我们使用6个字符来表示短链接,使用ASCII字符中的'a'-'z','0'-'5',共计32个字符做为集合。每个字符有32种状态,六个字符就可以表示32^6(1073741824),那么如何得到这六个字符,对传入的长URL进行Md5得到一个32位的字符串,这个字符串变化很多,是16的32次方,基本上可以保证唯一性。将这32位分成四份,每一份8个字符,这时机率变成了16的8次方是4294967296,这个数字碰撞的机率也比较小啦,关键是后面的一次处理。我们将这个8位的字符认为是16进制整数,也就是1*('0x'.$val),然后取0-30位,每5个一组,算出他的整数值,然后映射到我们准备的32个字符中,最后就能够得到一个6位的短链接地址。

代码如下:

function shorten( $long_url )  {       $base32 = "abcdefghijklmnopqrstuvwxyz012345";       $hex = md5( $long_url );       $hexLen = strlen( $hex );       $subHexLen = $hexLen / 8;       $output = array();       for( $i = 0; $i < $subHexLen; $i++ )       {            $subHex = substr( $hex, $i * 8, 8 );            $subHex = 0x3FFFFFFF & ( 1 * ('0x' . $subHex ) );

    $out = ''; 

          for( $j = 0; $j < 6; $j++ )            {                 $val = 0x0000001F & $int;                 $out .= $base32[$val];                 $int = $int >> 5;            }            $output[] = $out;       }       return $output;  }

另外两种看法:

实际上他们不会这样去实现的,要考虑效率。 正规做法应该是hash检验+id计数器+平衡树查找。 如果hash算法设计的巧妙,可以省略id计数器。

对长网址进行sha1生成的hash值存入hashtable或者redis,在缩短之前进行hash值比对,如果相同就查询出之前生成的短码即可。

php技术订阅号
php技术订阅号

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
有可以用的 新浪 腾讯的 http://www.t-cn.top 接口速度好 很稳定或者 用商用的 雨林短网址
有可以用的 新浪 腾讯的 http://www.t-cn.top 接口速度好 很稳定或者 用商用的 雨林短网址
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
短链接算法收集与分析
一般来说,第三步是我们比较头疼的,如何将一个长的URL字符串,映射成一个较短的字符串呢。我总结了三种办法:
大江小浪
2018/07/25
1.7K0
URL短网址生成算法原理
短网址(Short URL),是在形式上比较短的网址,通过映射关系跳转到原有的长网址。
阳光岛主
2019/02/18
4.6K2
业务id转密文短链的一种实现思路
买家通过电商app下单后,会受到一条短信,短信内容中包括改订单详情页面的h5地址连接,因为是出现在短信中,所以对连接有要求:1.尽量短;2.安全性考虑,订单在数据库中对应的自增主键id不能暴露出来;3. url中id加密串位数要固定
后端技术探索
2018/08/10
4750
PHP网址缩短算法代码(修复PHP7.0问题)
每个网址用6个字符代替,(32^6) 最多可以拥有1,073,741,824个短网址。当然,你还可以记录更详细的信息,如访问记录,创建时间等。如果真不够用了,还可以删掉很久不用的。
墨渊
2018/05/09
3.3K5
如何实现一个短链接服务 | 短链接生成原理
短链接,通俗来说,就是将长的URL网址,通过程序计算等方式,转换为简短的网址字符串。
梦溪
2021/08/09
19.5K3
如何设计一个短链接系统
短链接是一种将长URL地址转换为较短、易于记忆的链接的技术。它通过使用特定的算法或服务将长链接压缩成更短的形式,以便在限制字符长度或需要更简洁的场景下使用。
柯柏技术笔记
2024/01/10
8750
如何设计一个短链接系统
最近学到的「短链接」知识
最近接了一个需求,涉及到了短链接的相关的知识,于是去查阅了相关的资料,在这里给大家整理分享一下。
Java3y
2019/10/15
1.7K0
最近学到的「短链接」知识
面试官:如何实现一个短链接服务?
原文链接:https://javadoop.com/post/url-shortener
cxuan
2020/12/17
2.9K0
面试官:如何实现一个短链接服务?
短链接生成太无聊?试试看长链接生成,URL地址变成乐谱音符🎵
用短链接替换较长的原始 URL,使得用户在访问网页或资源时可以使用更短、更便于记忆和分享的链接,也方便隐藏Get请求。
Mintimate
2023/09/23
6442
短链接生成太无聊?试试看长链接生成,URL地址变成乐谱音符🎵
短链接系统如何设计
今天给大家带来的文章是:《短链接系统如何设计》。在开始之前,先让我们熟悉一下什么是长链接:
shigen
2023/10/14
4040
短链接系统如何设计
重发和重定向有什么区别与重定向应用
第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。
王小明_HIT
2020/09/29
8040
重发和重定向有什么区别与重定向应用
1. 如何设计一个短链接系统
  a. 微博推文, 每次限制只能有140个字,如果连接字符很多, 那么可编辑的文字就少了
用户7798898
2020/09/27
2.2K0
1. 如何设计一个短链接系统
短链接服务Octopus的实现与源码开放
半年前(2020-06)左右,疫情触底反弹,公司的业务量不断提升,运营部门为了方便短信、模板消息推送等渠道的投放,提出了一个把长链接压缩为短链接的功能需求。当时为了快速推广,使用了一些比较知名的第三方短链压缩平台,存在一些问题:
Throwable
2020/12/29
1K0
PHP网址缩短算法代码(修复PHP7.0问题)
每个网址用6个字符代替,(32^6) 最多可以拥有1,073,741,824个短网址。当然,你还可以记录更详细的信息,如访问记录,创建时间等。如果真不够用了,还可以删掉很久不用的。
V站CEO-西顾
2018/06/09
2.8K1
设计一个系统将长链接地址转为短链接地址
最近遇到一个面试题,问请你设计一个系统将长链接转为短链接。起初回答的不是很好,之后通过自己思考和查阅资料将这块的内容进行整理。
翎野君
2023/05/12
1.1K0
设计一个系统将长链接地址转为短链接地址
玩转C++小项目之短链接Demo
映射关系就不用说了,整一个map持久化内存,如果涉及到数据库,需要通过数据库的jdbc/odbc等接口访问写入库当中。
公众号guangcity
2023/09/22
1920
玩转C++小项目之短链接Demo
剖析短链接工具开发原理与源码讲解
微博和Twitter都有140字数的限制,如果分享一个长网址,很容易就超出限制,同时长链接也占用了太多的字符空间,无法编辑更多的内容。另外,如国内微信、淘宝等等很多平台都是无法互通,平台之间都或多或少存在相互屏蔽的行为。同时,还有一个比较重要的因素,在我们日常网络营销中,当营销活动推出后,却很难去追踪用户与效果,基于这些种种的因素,才最终导致了如今短链接的盛行。
用户9229846
2021/11/29
1.2K1
剖析短链接工具开发原理与源码讲解
「System Design」设计一个短链接系统
短链接系统可以把比较长的 URL 网址转换成简短的网址字符串,短链接的优势是方便传播。适合在一些对字符串长度有要求的场景中使用,比如短信,微博等,比如
全球技术精选
2022/09/05
4390
「System Design」设计一个短链接系统
搭建短链接平台详细分析及具体代码实现
短链接,又称缩略网址服务、缩址、短址、短网址、缩略网址、网址缩短、缩短网址、URL缩短等,指的是一种互联网上的技术与服务。此服务可以提供短URL以代替原来可能较长的URL,将长的URL地址缩短。
Mintimate
2021/08/12
3.9K0
搭建短链接平台详细分析及具体代码实现
短链接的实现
生活中,经常会在手机短信的广告中出现,因为短信服务本身对短信的长度有限制,如果使用一个非常长的链接,几百字符很快就能用完,关键信息的字符数被挤压,影响了服务方的广告价值同时也影响了消费者的观感,通过短链可以解决这个问题。
时光潜流
2023/10/22
6180
短链接的实现
相关推荐
短链接算法收集与分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档