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的access操作类
Apr 09 PHP
php新建文件自动编号的思路与实现
Jun 27 PHP
使用php伪造referer的方法 利用referer防止图片盗链
Jan 20 PHP
采用thinkphp自带方法生成静态html文件详解
Jun 13 PHP
ThinkPHP模板判断输出Defined标签用法详解
Jun 30 PHP
几道坑人的PHP面试题 试试看看你会不会也中招
Aug 19 PHP
PHP实现利用MySQL保存session的方法
Aug 23 PHP
PHP也能干大事 随机函数
Apr 14 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
Dec 25 PHP
PHP foreach遍历多维数组实现方式
Nov 16 PHP
php高清晰度无损图片压缩功能的实现代码
Dec 09 PHP
PHP cookie与session会话基本用法实例分析
Nov 18 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动态生成JavaScript代码
2009/03/09 PHP
TMDPHP 模板引擎使用教程
2012/03/13 PHP
从零开始学YII2框架(一)通过Composer安装Yii2框架
2014/08/20 PHP
php中fgetcsv()函数用法实例
2014/11/28 PHP
JQuery 无废话系列教程(一) jquery入门 [推荐]
2009/06/23 Javascript
JavaScript匿名函数用法分析
2015/02/13 Javascript
JavaScript获取网页中第一个图片id的方法
2015/04/03 Javascript
jquery编写Tab选项卡滚动导航切换特效
2020/07/17 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
jQuery实现的简单拖动层示例
2017/02/22 Javascript
vue在index.html中引入静态文件不生效问题及解决方法
2019/04/29 Javascript
JavaScript 截取字符串代码实例
2019/09/05 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
2020/05/13 Javascript
ES6箭头函数和扩展实例分析
2020/05/23 Javascript
[02:59]DOTA2完美大师赛主赛事第三日精彩集锦
2017/11/25 DOTA
Python利用QQ邮箱发送邮件的实现方法(分享)
2017/06/09 Python
Python WXPY实现微信监控报警功能的代码
2017/10/20 Python
python用列表生成式写嵌套循环的方法
2018/11/08 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
python读取并定位excel数据坐标系详解
2019/06/26 Python
一文秒懂python读写csv xml json文件各种骚操作
2019/07/04 Python
详解Python3中的 input() 函数
2020/03/18 Python
pycharm实现print输出保存到txt文件
2020/06/01 Python
理解Django 中Call Stack机制的小Demo
2020/09/01 Python
详解使用HTML5的classList属性操作CSS类
2017/10/13 HTML / CSS
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/04/11 面试题
公务员职务工作的自我评价
2013/11/01 职场文书
英语教育专业毕业生求职信
2014/08/28 职场文书
银行授权委托书范本
2014/10/04 职场文书
2014年班组工作总结
2014/11/20 职场文书
2015试用期转正工作总结
2014/12/12 职场文书
综合测评个人总结
2015/03/03 职场文书
房贷收入证明范本
2015/06/12 职场文书
2019个人工作态度自我评价
2019/04/24 职场文书
解析MySQL binlog
2021/06/11 MySQL
源码分析Redis中 set 和 sorted set 的使用方法
2022/03/22 Redis