PHP将URL转换成短网址的算法分享


Posted in PHP onSeptember 13, 2016

前言

短网址服务,可能很多朋友都已经不再陌生,现在大部分微博、手机邮件提醒等地方已经有很多应用模式了,并占据了一定的市场。估计很多朋友现在也正在使用。

短链接的好处:

1、内容需要;
2、用户友好;
3、便于管理。

下面是用PHP实现短网址转换的算法,代码如下:

PHP

<?php
//短网址生成算法
class ShortUrl {
  
  //字符表
  public static $charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
 
  public static function encode($url)
  {
    $key = 'abc'; //加盐
    $urlhash = md5($key . $url);
    $len = strlen($urlhash);
 
    //将加密后的串分成4段,每段4字节,对每段进行计算,一共可以生成四组短连接
    for ($i = 0; $i < 4; $i++) {
      $urlhash_piece = substr($urlhash, $i * $len / 4, $len / 4);
      
      //将分段的位与0x3fffffff做位与,0x3fffffff表示二进制数的30个1,即30位以后的加密串都归零
      //此处需要用到hexdec()将16进制字符串转为10进制数值型,否则运算会不正常
      $hex = hexdec($urlhash_piece) & 0x3fffffff;
 
      //域名根据需求填写
      $short_url = "http://t.cn/";
      
      //生成6位短网址
      for ($j = 0; $j < 6; $j++) {
        
        //将得到的值与0x0000003d,3d为61,即charset的坐标最大值
        $short_url .= self::$charset[$hex & 0x0000003d];
        
        //循环完以后将hex右移5位
        $hex = $hex >> 5;
      }
 
      $short_url_list[] = $short_url;
    }
 
    return $short_url_list;
  }
}
 
$url = "http://www.sunbloger.com/";
$short = ShortUrl::encode($url);
print_r($short);
?>

通常我们用四组网址中的第一组即可。

这里需要注意的是,这个算法是不可逆的,因此,通常的做法是将短网址和对应的原网址存入数据库,当访问时,从数据库中取出匹配的原网址,通过301或header进行跳转。

总结

以上就是这篇文章的全部内容,希望对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。

PHP 相关文章推荐
用Php实现链结人气统计
Oct 09 PHP
PHP时间戳使用实例代码
Jun 07 PHP
php中使用cookie来保存用户登录信息的实现代码
Mar 08 PHP
浅谈PHP调用Webservice思路及源码分享
Jun 04 PHP
codeigniter集成ucenter1.6双向通信的解决办法
Jun 12 PHP
yii操作session实例简介
Jul 31 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
Mar 05 PHP
PHP信号量基本用法实例详解
Feb 12 PHP
ThinkPHP路由机制简介
Mar 23 PHP
yii通过小物件生成view的方法
Oct 08 PHP
零基础php编程好学吗
Oct 11 PHP
PHP设计模式之 策略模式Strategy详解【对象行为型】
May 01 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
Sep 13 #PHP
php微信公众平台开发之微信群发信息
Sep 13 #PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
Sep 11 #PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
Sep 11 #PHP
PHP入门教程之面向对象基本概念实例分析
Sep 11 #PHP
PHP入门教程之PHP操作MySQL的方法分析
Sep 11 #PHP
PHP入门教程之图像处理技巧分析
Sep 11 #PHP
You might like
php实现基于openssl的加密解密方法
2016/09/30 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
2016/11/09 PHP
PHP实现生成推广海报的方法详解
2018/03/14 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
javascript 命名规则 变量命名规则
2010/02/25 Javascript
js下写一个事件队列操作函数
2010/07/19 Javascript
javascript 进阶篇2 CSS XML学习
2012/03/14 Javascript
如何学习Javascript入门指导
2013/11/01 Javascript
js中substr,substring,indexOf,lastIndexOf的用法小结
2013/12/27 Javascript
Javascript实现快速排序(Quicksort)的算法详解
2015/09/06 Javascript
Nodejs全局安装和本地安装的不同之处
2016/07/04 NodeJs
jQuery Ajax使用FormData对象上传文件的方法
2016/09/07 Javascript
javascript 动态生成css代码的两种方法
2017/03/17 Javascript
详解用node-images 打造简易图片服务器
2017/05/08 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
2019/05/09 Javascript
微信小程序动态显示项目倒计时
2019/06/20 Javascript
基于python socketserver框架全面解析
2017/09/21 Python
恢复百度云盘本地误删的文件脚本(简单方法)
2017/10/21 Python
python3+dlib实现人脸识别和情绪分析
2018/04/21 Python
pandas 对每一列数据进行标准化的方法
2018/06/09 Python
django如何通过类视图使用装饰器
2019/07/24 Python
python实现邮件发送功能
2019/08/10 Python
俄罗斯旅游网站:Tripadvisor俄罗斯
2017/03/21 全球购物
澳大利亚买卖正宗二手奢侈品交易平台:Luxe.It.Fwd
2019/10/16 全球购物
Booking.com亚太地区:Booking.com APAC
2020/02/07 全球购物
八一慰问活动方案
2014/02/07 职场文书
中学教师教育感言
2014/02/21 职场文书
自我推荐信范文
2014/05/09 职场文书
小学生感恩父母演讲稿
2014/08/28 职场文书
初级党校心得体会
2014/09/11 职场文书
2014年财政所工作总结
2014/11/22 职场文书
员工担保书范本
2015/09/22 职场文书
人身损害赔偿协议书
2016/03/22 职场文书
小学生一年级(书信作文)
2019/08/13 职场文书
vue使用Google Recaptcha验证的实现示例
2021/08/23 Vue.js
Python实现制作销售数据可视化看板详解
2021/11/27 Python