文档章节

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

幸福的猫猫
 幸福的猫猫
发布于 2013/03/07 21:34
字数 719
阅读 845
收藏 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
07/28
0
0
微博短链接的生成算法(Java版本)

微博短链接的生成算法(Java 版本) 最近看到微博的短链接真是很火啊,新浪、腾讯、搜狐等微博网站都加入了短链接的功能。之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太...

java-苦苦甜甜
2012/11/22
0
3
微博URL短网址生成算法原理及(java版、php版实现实例)

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

小老傅
2014/08/20
0
5
长url与短url之间建立映射关系 Encode and Decode TinyURL

问题: Note: This is a companion problem to the System Design problem: Design TinyURL. TinyURL is a URL shortening service where you enter a URL such as and it returns a short U......

叶枫啦啦
01/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

中秋快乐!!!

HiBlock
今天
1
0
Node安装教程

1、安装最新版的node 2、设置相关目录(以D盘为例) 分别建立目录:D:\node,D:\node\node-globa,D:\node\node-cache 命令行输入: // 设置npm国内镜像 npm config set registry https://re...

Mohan710
今天
3
0
中国发布域名系统基础软件 “红枫”

9月12日消息,域名工程中心(英文缩写 ZDNS)发布了宣称自主开发的域名系统基础软件 “红枫(Maple DNS)”。 9月12日消息,域名工程中心(英文缩写 ZDNS)发布了宣称自主开发的域名系统基础软...

问题终结者
今天
3
0
Shell编程(分发系统介绍、expect远程登录、expect远程执行命令、expect传递参数)

分发系统介绍expect 分发系统expect即分发脚本,是一种脚本语言;通过他可以实现传输,输入命令(上线代码) 应用场景:业务越来越大,网站app,后端,编程语言是php,所以就需要配置lamp或者...

蛋黄_Yolks
今天
4
0
Java Http请求工具类

public static String httpPost(String source, String params) {URL url = null;HttpURLConnection conn = null;OutputStream os = null;String ret = null;try {......

yuewawa
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部