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数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
Oct 31 PHP
str_replace只替换一次字符串的方法
Apr 09 PHP
php多文件上传功能实现原理及代码
Apr 18 PHP
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
Jun 05 PHP
提高PHP编程效率的方法
Nov 07 PHP
PHP与MYSQL中UTF8编码的中文排序实例
Oct 21 PHP
php实现mysql事务处理的方法
Dec 25 PHP
windows下安装php的memcache模块的方法
Apr 07 PHP
PHP中的类型约束介绍
May 11 PHP
golang与PHP输出excel示例
Jul 22 PHP
phpstudy默认不支持64位php的解决方法
Feb 20 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
Aug 26 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
php5.2时间相差8小时
2007/01/15 PHP
攻克CakePHP系列二 表单数据显示
2008/10/22 PHP
新手菜鸟必读:session与cookie的区别
2013/08/22 PHP
php上传图片存入数据库示例分享
2014/03/11 PHP
php 使用curl模拟ip和来源进行访问的实现方法
2017/05/02 PHP
使用laravel和ECharts实现折线图效果的例子
2019/10/09 PHP
经常用的图片在容器中的水平垂直居中实例
2007/06/10 Javascript
js控制web打印(局部打印)方法整理
2013/05/29 Javascript
jQuery中detach()方法用法实例
2014/12/25 Javascript
js仿淘宝和百度文库的评分功能
2016/05/15 Javascript
JavaScript仿flash遮罩动画效果
2016/06/15 Javascript
JS判断是否在微信浏览器打开的简单实例(推荐)
2016/08/24 Javascript
使用Promise链式调用解决多个异步回调的问题
2017/01/15 Javascript
详谈angularjs中路由页面强制更新的问题
2017/04/24 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
2017/08/19 jQuery
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
2018/07/13 Javascript
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
浅谈JS中this在各个场景下的指向
2019/08/14 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
2020/07/22 Javascript
详解Vue中的watch和computed
2020/11/09 Javascript
linux系统使用python监测系统负载脚本分享
2014/01/15 Python
详解python之简单主机批量管理工具
2017/01/27 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
2019/04/12 Python
Python列表元素常见操作简单示例
2019/10/25 Python
python tkinter canvas使用实例
2019/11/04 Python
python包的导入方式总结
2021/03/02 Python
Spartoo英国:欧洲最大的网上鞋店
2016/09/13 全球购物
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
Envie de Fraise意大利:法国网上推出的孕妇装品牌
2020/10/18 全球购物
几个Shell Script面试题
2012/08/31 面试题
大龄毕业生求职别忘职业规划
2014/03/11 职场文书
解除劳动关系协议书2篇
2014/11/28 职场文书
2015年党风廉政建设目标责任书
2015/05/08 职场文书
逃出克隆岛观后感
2015/06/09 职场文书
goland 恢复已更改文件的操作
2021/04/28 Golang
Mysql文件存储图文详解
2021/06/01 MySQL