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 相关文章推荐
SMARTY学习手记
Jan 04 PHP
PHP实现Socket服务器的代码
Apr 03 PHP
php 动态多文件上传
Jan 18 PHP
php中如何判断一个网页请求是ajax请求还是普通请求
Aug 10 PHP
单点登录 Ucenter示例分析
Oct 29 PHP
PHP源码分析之变量的存储过程分解
Jul 03 PHP
PHP中使用sleep函数实现定时任务实例分享
Aug 21 PHP
基于php实现七牛抓取远程图片
Dec 01 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
Dec 02 PHP
浅谈PHP中关于foreach使用引用变量的坑
Nov 14 PHP
php中输出json对象的值(实现方法)
Mar 07 PHP
Swoole源码中如何查询Websocket的连接问题详解
Aug 30 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读取二进制流(C语言结构体struct数据文件)的深入解析
2013/06/13 PHP
destoon调用企业会员公司形象图片的实现方法
2014/08/21 PHP
PHP版本常用的排序算法汇总
2015/12/20 PHP
php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
2015/12/21 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
我也种棵OO树JXTree[js+css+xml]
2007/04/02 Javascript
javascript delete 使用示例代码
2010/03/29 Javascript
深入理解Java线程编程中的阻塞队列容器
2015/12/07 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
2016/08/10 Javascript
JavaScript中最常用的10种代码简写技巧总结
2017/06/28 Javascript
详谈AngularJs 控制器、数据绑定、作用域
2017/07/09 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
Vue2 SSR渲染根据不同页面修改 meta
2017/11/20 Javascript
仿淘宝JSsearch搜索下拉深度用法
2018/01/15 Javascript
JS为什么说async/await是generator的语法糖详解
2019/07/11 Javascript
原生js代码能实现call和bind吗
2019/07/31 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
vue实现计步器功能
2019/11/01 Javascript
JS一次前端面试经历记录
2020/03/19 Javascript
vant 自定义 van-dropdown-item的用法
2020/08/05 Javascript
el-form 多层级表单的实现示例
2020/09/10 Javascript
Python heapq使用详解及实例代码
2017/01/25 Python
Python 高级专用类方法的实例详解
2017/09/11 Python
PyCharm+PySpark远程调试的环境配置的方法
2018/11/29 Python
如何使用python切换hosts文件
2020/04/29 Python
Ray-Ban雷朋美国官网:全球领先的太阳眼镜品牌
2016/07/20 全球购物
打造经典复古风格的品牌:Alice + Olivia(爱丽丝+奥利维亚)
2016/09/07 全球购物
法雷奥SQA(electric)面试问题
2016/01/23 面试题
十岁生日父母答谢词
2014/01/18 职场文书
工程建设实施方案
2014/03/14 职场文书
承诺书怎么写
2014/03/26 职场文书
小学生反邪教心得体会
2016/01/15 职场文书
新学期新寄语,献给新生们!
2019/11/15 职场文书
Python 如何实现文件自动去重
2021/06/02 Python
Golang gRPC HTTP协议转换示例
2022/06/16 Golang