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 相关文章推荐
linux下 C语言对 php 扩展
Dec 14 PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
Oct 12 PHP
php防注入及开发安全详细解析
Aug 09 PHP
Thinkphp模板中截取字符串函数简介
Jun 17 PHP
php中字符串和正则表达式详解
Oct 23 PHP
yii实现图片上传及缩略图生成的方法
Dec 04 PHP
Java和PHP在Web开发方面对比分析
Mar 01 PHP
PHP+MySQL存储数据常见中文乱码问题小结
Jun 13 PHP
phpStudy 2016 使用教程详解(支持PHP7)
Oct 18 PHP
Laravel框架实现利用中间件进行操作日志记录功能
Jun 06 PHP
使用composer 安装 laravel框架的方法图文详解
Aug 02 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
Nov 25 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程序的方法
2009/03/09 PHP
session在PHP大型web应用中的使用
2011/06/25 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
2014/10/23 PHP
PHP实现根据密码长度显示安全条
2017/07/04 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
如何用ajax来创建一个XMLHttpRequest对象
2012/12/10 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
在JavaScript中操作时间之getMonth()方法的使用
2015/06/10 Javascript
基于jquery实现的树形菜单效果代码
2015/09/06 Javascript
angularjs学习笔记之双向数据绑定
2015/09/26 Javascript
第一次接触神奇的Bootstrap导航条
2016/08/09 Javascript
EasyUI创建对话框的两种方式
2016/08/23 Javascript
bootstrap选项卡使用方法解析
2017/01/11 Javascript
footer定位页面底部(代码分享)
2017/03/07 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
Vue组件通信的几种实现方法
2019/04/25 Javascript
解决layui动态添加的元素click等事件触发不了的问题
2019/09/20 Javascript
浅谈Layui的eleTree树式选择器使用方法
2019/09/25 Javascript
Vue脚手架编写试卷页面功能
2020/03/17 Javascript
JavaScript实现世界各地时间显示
2020/09/07 Javascript
如何手写简易的 Vue Router
2020/10/10 Javascript
对于Python中RawString的理解介绍
2016/07/07 Python
python中reduce()函数的使用方法示例
2017/09/29 Python
Python使用re模块实现信息筛选的方法
2018/04/29 Python
PyTorch 普通卷积和空洞卷积实例
2020/01/07 Python
Python如何把多个PDF文件合并代码实例
2020/02/13 Python
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
车间副主任岗位职责
2013/12/24 职场文书
五年级英语教学反思
2014/01/31 职场文书
关于祖国的演讲稿
2014/05/04 职场文书
银行求职信范文
2014/05/26 职场文书
党的群众路线教育实践活动自我剖析材料
2014/10/08 职场文书
六查六看心得体会
2014/10/14 职场文书
2014年机关后勤工作总结
2014/12/16 职场文书
python读取并查看npz/npy文件数据以及数据显示方法
2022/04/14 Python
详解Flutter自定义应用程序内键盘的实现方法
2022/06/14 Java/Android