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中的字符串函数
Nov 24 PHP
php将会员数据导入到ucenter的代码
Jul 18 PHP
php中取得URL的根域名的代码
Mar 23 PHP
php木马webshell扫描器代码
Jan 25 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
Nov 25 PHP
php创建桌面快捷方式实现方法
Dec 31 PHP
php实现搜索类封装示例
Mar 31 PHP
简单理解PHP的面向对象编程方式
May 17 PHP
PHP入门教程之面向对象基本概念实例分析
Sep 11 PHP
PHP定义字符串的四种方式详解
Feb 06 PHP
PHP基于redis计数器类定义与用法示例
Feb 08 PHP
PHP命名空间namespace及use的简单用法分析
Aug 03 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
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
PHP中数组定义的几种方法
2013/09/01 PHP
PHP将XML转数组过程详解
2013/11/13 PHP
php给图片加文字水印
2015/07/31 PHP
PHP实现对xml的增删改查操作案例分析
2017/05/19 PHP
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
js字符串日期yyyy-MM-dd转化为date示例代码
2014/03/06 Javascript
Javascript冒泡排序算法详解
2014/12/03 Javascript
jQuery 选择器详解
2015/01/19 Javascript
JQuery菜单效果的两个实例讲解(3)
2015/09/17 Javascript
原生javascript实现addClass,removeClass,hasClass函数
2016/02/25 Javascript
基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)
2016/09/02 Javascript
Javascript+CSS3实现进度条效果
2016/10/28 Javascript
BootStrap CSS全局样式和表格样式源码解析
2017/01/20 Javascript
详谈js模块化规范
2017/07/07 Javascript
JS实现的邮箱提示补全效果示例
2018/01/30 Javascript
详解js类型判断
2018/05/22 Javascript
vue+axios 前端实现的常用拦截的代码示例
2018/08/23 Javascript
vue-loader中引入模板预处理器的实现
2019/09/04 Javascript
[08:54]DOTA2-DPC中国联赛 正赛 Aster vs LBZS 选手采访
2021/03/11 DOTA
Python多线程编程(五):死锁的形成
2015/04/05 Python
在Python中操作字符串之replace()方法的使用
2015/05/19 Python
python验证码识别教程之利用滴水算法分割图片
2018/06/05 Python
python多行字符串拼接使用小括号的方法
2020/03/19 Python
浅谈flask源码之请求过程
2018/07/26 Python
python将一组数分成每3个一组的实例
2018/11/14 Python
python自动发邮件总结及实例说明【推荐】
2019/05/31 Python
Django连接数据库并实现读写分离过程解析
2019/11/13 Python
css3类选择器之结合元素选择器和多类选择器用法
2017/03/09 HTML / CSS
日本高端护肤品牌:Tatcha
2016/08/29 全球购物
Europcar德国:全球汽车租赁领域的领导者
2018/08/15 全球购物
当当网软件测试笔试题
2015/11/24 面试题
会计专业的自荐信
2013/12/12 职场文书
保护动物倡议书
2014/04/15 职场文书
中共广东省委常委会党的群众路线教育实践活动整改方案
2014/09/23 职场文书
在K8s上部署Redis集群的方法步骤
2021/04/27 Redis