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编程开发“虚拟域名”系统
Oct 09 PHP
PHP面向接口编程 耦合设计模式 简单范例
Mar 23 PHP
从康盛产品(discuz)提取出来的模板类
Jun 28 PHP
php中使用Curl、socket、file_get_contents三种方法POST提交数据
Aug 12 PHP
PHP动态分页函数,PHP开发分页必备啦
Nov 07 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
May 06 PHP
PHP中exec与system用法区别分析
Sep 22 PHP
dedecms集成财付通支付接口
Dec 28 PHP
php中异常处理方法小结
Jan 09 PHP
详解php 使用Callable Closure强制指定回调类型
Oct 26 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 PHP
Laravel如何使用Redis共享Session
Feb 23 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采集时被封ip的解决方法
2010/08/29 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
php使用google地图应用实例
2014/12/31 PHP
php判断表是否存在的方法
2015/06/18 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
2019/06/25 PHP
JavaScript 开发中规范性的一点感想
2009/06/23 Javascript
JavaScript和ActionScript的交互实现代码
2010/08/01 Javascript
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
2014/11/20 NodeJs
jQuery自动完成插件completer附源码下载
2016/01/04 Javascript
详解JavaScript中Hash Map映射结构的实现
2016/05/21 Javascript
JS创建对象的写法示例
2016/11/04 Javascript
原生JS实现图片轮播效果
2016/12/26 Javascript
详解js中==与===的区别
2017/01/08 Javascript
Auto.js自动收取自己和好友蚂蚁森林能量脚本
2018/06/28 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
详解webpack打包nodejs项目(前端代码)
2018/09/19 NodeJs
详解微信小程序中组件通讯
2018/10/30 Javascript
Pyramid Mako模板引入helper对象的步骤方法
2013/11/27 Python
Python标准库defaultdict模块使用示例
2015/04/28 Python
python中numpy的矩阵、多维数组的用法
2018/02/05 Python
python操作redis方法总结
2018/06/06 Python
Python Cookie 读取和保存方法
2018/12/28 Python
pyqt5 删除layout中的所有widget方法
2019/06/25 Python
详解Python并发编程之从性能角度来初探并发编程
2019/08/23 Python
廉价连衣裙和婚纱礼服在线销售:Tbdress
2019/02/28 全球购物
全球性的女装店:storets
2019/06/12 全球购物
Kiwi.com中国:找到特价机票并发现新目的地
2019/10/27 全球购物
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
泰国国际航空公司官网:Thai Airways International
2019/12/04 全球购物
投资合作协议书范本
2014/04/17 职场文书
淘宝活动总结范文
2014/06/26 职场文书
优秀党员自我评价范文
2014/09/15 职场文书
见习报告的格式
2014/10/31 职场文书
2015年安全月活动总结
2015/03/26 职场文书
《学会看病》教学反思
2016/02/17 职场文书
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
2022/02/12 Redis