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 相关文章推荐
session在PHP大型web应用中的使用
Jun 25 PHP
hadoop中一些常用的命令介绍
Jun 19 PHP
PHP开发框架Laravel数据库操作方法总结
Sep 03 PHP
php遍历树的常用方法汇总
Jun 18 PHP
PHP json_encode() 函数详解及中文乱码问题
Nov 05 PHP
PHP实现通过URL提取根域名
Mar 31 PHP
PHP编程实现微信企业向用户付款的方法示例
Jul 26 PHP
Yaf框架封装的MySQL数据库操作示例
Mar 06 PHP
PHP+iframe模拟Ajax上传文件功能示例
Jul 02 PHP
PHP迭代器和生成器用法实例分析
Sep 28 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
Oct 08 PHP
laravel使用数据库测试注意事项
Apr 10 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 socke 向指定页面提交数据
2008/07/23 PHP
PHP查看当前变量类型的方法
2015/07/31 PHP
php接口实现拖拽排序功能
2018/04/23 PHP
Javascript实现字数统计
2015/07/03 Javascript
使用OpenLayers3 添加地图鼠标右键菜单
2015/12/29 Javascript
Bootstrap Modal遮罩弹出层(完整版)
2016/11/21 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
2016/12/08 Javascript
jquery实现表单获取短信验证码代码
2017/03/13 Javascript
vue元素实现动画过渡效果
2017/07/01 Javascript
Vue之Watcher源码解析(1)
2017/07/19 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
Django+vue跨域问题解决的详细步骤
2019/01/20 Javascript
大转盘抽奖小程序版 转盘抽奖网页版
2020/04/16 Javascript
vue项目打包后怎样优雅的解决跨域
2019/05/26 Javascript
js实现图片上传到服务器和回显
2020/01/19 Javascript
使用Vant完成Dialog弹框案例
2020/11/11 Javascript
python根据经纬度计算距离示例
2014/02/16 Python
Python中的Matplotlib模块入门教程
2015/04/15 Python
python 统计代码行数简单实例
2017/05/04 Python
python2 与 pyhton3的输入语句写法小结
2018/09/10 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
2018/12/17 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
TensorFlow低版本代码自动升级为1.0版本
2021/02/20 Python
印度网上购物首选目的地:Flipkart
2016/08/01 全球购物
连卡佛中国官网:Lane Crawford中文站
2018/01/27 全球购物
巴西Mr. Cat在线商店:购买包包和鞋子
2019/09/08 全球购物
大学生应聘自荐信
2013/10/11 职场文书
高三自我鉴定怎么写
2013/10/19 职场文书
师范毕业生自我鉴定
2014/01/15 职场文书
模范教师事迹材料
2014/02/10 职场文书
春秋淹城导游词
2015/02/11 职场文书
暂住证明怎么写
2015/06/19 职场文书
2015年村级财务管理制度
2015/08/04 职场文书
CSS3实现模糊背景的三种效果示例
2021/03/30 HTML / CSS
MySQL学习必备条件查询数据
2022/03/25 MySQL
Java中API的使用方法详情
2022/04/06 Java/Android