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 来访国内外IP判断代码并实现页面跳转
Dec 18 PHP
PHP的foreach中使用引用时需要注意的一个问题和解决方法
May 29 PHP
PHP图片等比例缩放生成缩略图函数分享
Jun 10 PHP
PHP生成指定随机字符串的简单实现方法
Apr 01 PHP
ThinkPHP文件缓存类代码分享
Apr 22 PHP
详解PHP执行定时任务的实现思路
Dec 21 PHP
浅谈PHP Cookie处理函数
Jun 10 PHP
php array_slice 取出数组中的一段序列实例
Nov 04 PHP
php的laravel框架快速集成微信登录的方法
Dec 12 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
PHP合并两个或多个数组的方法
Jan 20 PHP
asp函数split()对应php函数explode()
Feb 27 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中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
2011/11/10 PHP
php实现购物车功能(以大苹果购物网为例)
2017/03/09 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
2019/05/30 PHP
jquery的index方法实现tab效果
2011/02/16 Javascript
使用Jquery打造最佳用户体验的登录页面的实现代码
2011/07/08 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
AngularJS 最常用的功能汇总
2016/02/17 Javascript
jQuery使用ajax跨域获取数据的简单实例
2016/05/18 Javascript
jQuery 自定义下拉框(DropDown)附源码下载
2016/07/22 Javascript
jquery二级目录选中当前页的css样式
2016/12/08 Javascript
微信小程序商城项目之淘宝分类入口(2)
2017/04/17 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
2017/12/06 Javascript
微信小程序实现滚动消息通知
2018/02/02 Javascript
bootstrap Table实现合并相同行
2019/07/19 Javascript
vue实现购物车加减
2020/05/30 Javascript
跨平台python异步回调机制实现和使用方法
2013/11/26 Python
python原始套接字编程示例分享
2014/02/21 Python
Python创建xml文件示例
2017/03/22 Python
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
python实现俄罗斯方块游戏(改进版)
2020/03/13 Python
Pygame的程序开始示例代码
2020/05/07 Python
基于pandas向csv添加新的行和列
2020/05/25 Python
使用C#编写创建一个线程的代码
2013/01/22 面试题
构造方法和其他方法的区别
2016/04/26 面试题
前台接待岗位职责
2013/12/03 职场文书
我的画教学反思
2014/04/28 职场文书
网吧消防安全责任书
2014/07/29 职场文书
校运动会广播稿300字
2014/10/07 职场文书
2015年保洁工作总结范文
2015/04/28 职场文书
门卫管理制度范本
2015/08/05 职场文书
2016年幼儿园教研活动总结
2016/04/05 职场文书
Python利用zhdate模块实现农历日期处理
2022/03/31 Python
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js