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截取utf-8中文字符串乱码的解决方法
Mar 29 PHP
php递归实现无限分类生成下拉列表的函数
Aug 08 PHP
PHP开发中的错误收集,不定期更新。
Feb 03 PHP
php Calender(日历)代码分享
Jan 03 PHP
php 启动报错如何解决
Jan 17 PHP
php调用google接口生成二维码示例
Apr 28 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
Dec 26 PHP
PHP闭包函数详解
Feb 13 PHP
PHP ADODB实现分页功能简单示例
May 25 PHP
PHP-FPM的配置与优化讲解
Mar 15 PHP
关于Laravel-admin的基础用法总结和自定义model详解
Oct 08 PHP
PHP mkdir创建文件夹实现方法解析
Nov 13 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 随机记录mysql rand()造成CPU 100%的解决办法
2010/05/18 PHP
PHP+JS+rsa数据加密传输实现代码
2011/03/23 PHP
PHP漏洞全解(详细介绍)
2012/11/13 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
2015/07/10 PHP
Laravel中服务提供者和门面模式的入门介绍
2017/11/06 PHP
通过Mootools 1.2来操纵HTML DOM元素
2009/09/15 Javascript
jsp+javascript打造级连菜单的实例代码
2013/06/14 Javascript
在ASP.NET中使用JavaScript脚本的方法
2013/11/12 Javascript
jquery实现LED广告牌旋转系统图片切换效果代码分享
2015/08/26 Javascript
jquery对dom节点的操作【推荐】
2016/04/15 Javascript
javascript滚轮控制模拟滚动条
2016/10/19 Javascript
jQuery ajax的功能实现方法详解
2017/01/06 Javascript
基于Vue2.0的分页组件
2017/03/16 Javascript
基于JavaScript实现瀑布流效果
2017/03/29 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
javascript实现考勤日历功能
2018/11/29 Javascript
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
编写Python脚本来实现最简单的FTP下载的教程
2015/05/04 Python
python3中str(字符串)的使用教程
2017/03/23 Python
使用python遍历指定城市的一周气温
2017/03/31 Python
Python实现好友全头像的拼接实例(推荐)
2017/06/24 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
2018/04/09 Python
Python中的Numpy矩阵操作
2018/08/12 Python
python爬虫中多线程的使用详解
2019/09/23 Python
tensorflow指定CPU与GPU运算的方法实现
2020/04/21 Python
python:HDF和CSV存储优劣对比分析
2020/06/08 Python
外企C语言笔试题
2013/11/10 面试题
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
Ruby如何定义一个类
2012/10/08 面试题
会计专业毕业自荐书范文
2014/02/08 职场文书
时尚女魔头观后感
2015/06/04 职场文书
《中国机长》观后感:敬畏生命,敬畏职责
2019/11/12 职场文书
Spring Data JPA使用JPQL与原生SQL进行查询的操作
2021/06/15 Java/Android
mybatis 获取无数据的字段不显示的问题
2021/07/15 Java/Android
vscode中使用npm安装babel的方法
2021/08/02 Javascript
mysql的单列多值存储实例详解
2022/04/05 MySQL