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世纪万年历
Dec 06 PHP
ionCube 一款类似zend的PHP加密/解密工具
Jul 25 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
Jul 03 PHP
浅谈php serialize()与unserialize()的用法
Jun 05 PHP
PHP获取文件的MD5值并判断是否被修改的例子
Jun 19 PHP
yii2.0实现pathinfo的形式访问的配置方法
Apr 06 PHP
PHP session会话操作技巧小结
Sep 27 PHP
php 实现Hash表功能实例详解
Nov 29 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
Jun 12 PHP
Laravel框架实现利用监听器进行sql语句记录功能
Jun 06 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
May 05 PHP
Laravel 前端资源配置教程
Oct 18 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多重接口的实现方法
2015/06/20 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
PHP单链表的实现代码
2016/07/05 PHP
JavaScript参数个数可变的函数举例说明
2014/10/10 Javascript
html的DOM中document对象forms集合用法实例
2015/01/21 Javascript
JavaScript的内存释放问题详解
2015/01/21 Javascript
浅谈JavaScript中的作用域和闭包问题
2015/07/07 Javascript
js实现的二级横向菜单条实例
2015/08/22 Javascript
JQuery 在文档中查找指定name的元素并移除的实现方法
2016/05/19 Javascript
JS实现仿百度文库评分功能
2017/01/12 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
微信小程序登录态控制深入分析
2017/04/12 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
2017/07/31 Javascript
详解.vue文件解析的实现
2018/06/11 Javascript
详解JavaScript作用域和作用域链
2019/03/19 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
详解ES6 扩展运算符的使用与注意事项
2020/11/12 Javascript
[40:13]Ti4 冒泡赛第二天 iG vs NEWBEE 2
2014/07/15 DOTA
[02:19]2018年度DOTA2最佳核心位选手-完美盛典
2018/12/17 DOTA
python二叉树的实现实例
2013/11/21 Python
Python利用WMI实现ping命令的例子
2019/08/14 Python
Django之使用celery和NGINX生成静态页面实现性能优化
2019/10/08 Python
python dataframe NaN处理方式
2019/12/26 Python
Python @property及getter setter原理详解
2020/03/31 Python
Keras设置以及获取权重的实现
2020/06/19 Python
美发活动策划书
2014/01/14 职场文书
网吧七夕活动策划方案
2014/08/31 职场文书
群众路线四风问题整改措施
2014/09/27 职场文书
四风查摆剖析材料
2014/10/10 职场文书
解除租房协议书
2014/12/03 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
明星邀请函
2015/02/02 职场文书
2015年社会治安综合治理工作总结
2015/04/10 职场文书
python解决12306登录验证码的实现
2021/04/18 Python
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang
Windows Server 修改远程桌面端口的实现
2022/06/25 Servers