文档章节

微博短链接解析ShortUrl【PHP代码实现】

幸福的猫猫
 幸福的猫猫
发布于 2013/03/07 21:34
字数 719
阅读 861
收藏 6

      一、背景简介

      短网址应用已经在各大微博上开始流行了起来。例如QQ微博的url.cn,新浪的sinaurl.cn等。我们在QQ微博上发布网址的时候,微博会自动判别网址,并将其转换,例如:http://url.cn/0nAcBW

       为什么要这样做的,原因我想有这样几点:
      1、微博限制字数为140字一条,那么如果我们需要发一些连接上去,但是这个连接非常的长,以至于将近要占用我们内容的一半篇幅,这肯定是不能被允许的,所以短网址应运而生了。
      2、短网址可以在我们项目里可以很好的对开放级URL进行管理。有一部分网址可以会涵盖色情,暴力,广告等信息,这样我们可以通过用户的举报,完全管理这个连接将不出现在我们的应用中,应为同样的URL通过加密算法之后,得到的地址是一样的。
      3、我们可以对一系列的网址进行流量,点击等统计,挖掘出大多数用户的关注点,这样有利于我们对项目的后续工作更好的作出决策。

      二、如何实现

      下面先来看看短网址映射算法的理论(网上找到的资料)
      1)将长网址md5生成32位签名串,分为4段, 每段8个字节;
      2)对这四段循环处理, 取8个字节, 将他看成16进制串与0x3fffffff(30位1)与操作, 即超过30位的忽略处理;
      3)这30位分成6段, 每5位的数字作为字母表的索引取得特定字符, 依次进行获得6位字符串;
      4)总的md5串可以获得4个6位串; 取里面的任意一个就可作为这个长url的短url地址;
      下面是PHP代码:
      function shorturl($input) {       
            $base32 = array ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h','i', 'j', 'k', 'l', 'm', 'n', 'o', 'p','q', 'r', 's', 't', 'u', 'v', 'w', 'x','y', 'z', '0', '1', '2', '3', '4', '5'); 

            $hex = md5('prefix'.$input.'surfix');      
            $hexLen = strlen($hex);        
            $subHexLen = $hexLen / 8;       
            $output = array();         
            for ($i = 0; $i < $subHexLen; $i++) {                
                  $subHex = substr ($hex, $i * 8, 8);                
                  $int = 0x3FFFFFFF & (1 * ('0x'.$subHex));               
                  $out = '';                
                  for ($j = 0; $j < 6; $j++) {                       
                        $val = 0x0000001F & $int;                        
                        $out .= $base32[$val];                        
                        $int = $int >> 5;                
                  }               
                  $output = $out;       
            }       
            return $output;
      }

      三、输出结果
      执行下面代码的结果如下,会产生4 组6 位字符串,任意一组都可以作为当前字符串的短链接地址。
      print_r (shorturl(‘http://www.i5good.com/shorturl.html’));
      结果:
      nibgx3

      四、跳转原理
      当我们生成短链接之后,只需要在表中(数据库或者NoSql )存储原始链接与短链接的映射关系即可。当我们访问短链接时,只需要从映射关系中找到原始链接,即可跳转到原始链接。

© 著作权归作者所有

共有 人打赏支持
幸福的猫猫
粉丝 2
博文 29
码字总数 15905
作品 0
海淀
程序员
私信 提问
加载中

评论(1)

Deacyn
Deacyn
感觉这才是正确的!
URL短地址压缩算法 微博短地址原理解析 (Java实现)

最近,项目中需要用到短网址(ShortUrl)的算法,于是在网上搜索一番,发现有C#的算法,有.Net的算法,有PHP的算法,就是没有找到Java版的短网址(ShortUrl)的算法,很是郁闷。同时还发现有...

神勇小白鼠
2014/07/29
0
0
535. Encode and Decode TinyURL - LeetCode

Question 535. Encode and Decode TinyURL Solution 题目大意:实现长链接加密成短链接,短链接解密成长链接 思路:加密成短链接+key,将长链接按key保存到map,解密时根据短链接提取key,再从map...

yysue
2018/07/28
0
0
关于apache服务器mod_rewrite配置

我的目的是在地址栏输入的url: http://localhost/project/ShortURL/index.php/149Ui3 自动重写为 http://localhost/project/ShortURL/index.php?controller=jump&method=jemp&code=149Ui3 ap......

Dreamshield
2015/03/06
822
10
osc的短url用的是什么方法 ?在java里有没有比较好的处理shorturl的框架

osc的短url用的是什么方法啊在java里有没有比较好的处理shorturl的框架之类的?好像osc用的是shorturl和普通url的混合型 的?

黑神领主
2012/02/21
373
2
微博URL短网址生成算法原理及(java版、php版实现实例)

短网址(Short URL),顾名思义就是在形式上比较短的网址。通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流。目前已经有许多类似服务,借助短网址您可以用简短的网址替代...

小老傅
2014/08/20
0
5

没有更多内容

加载失败,请刷新页面

加载更多

数据库篇多表操作

第1章 多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系...

stars永恒
28分钟前
1
0
nginx日志自动切割

1.日志配置(Nginx 日志) access.log----记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;error.log------记录服务器错误的日志 #配置日志存储路径:location / {      a...

em_aaron
昨天
1
0
java 反射

基本概念 RTTI,即Run-Time Type Identification,运行时类型识别。RTTI能在运行时就能够自动识别每个编译时已知的类型。   要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运...

细节探索者
昨天
1
0
推荐转载连接

https://www.cnblogs.com/ysocean/p/7409779.html#_label0

小橙子的曼曼
昨天
3
0
雷军亲自打造的套餐了解下:用多少付多少

12月28日消息,小米科技创始人兼CEO雷军微博表示,小米移动任我行套餐方案,原则上就是明明白白消费,用多少付多少,不用不花钱!上网、电话和短信都是一毛钱,上网0.1元/M,电话0.1元/分钟,...

linuxCool
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部