程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP將URL轉換成短網址的算法分享

PHP將URL轉換成短網址的算法分享

編輯:PHP綜合

前言

短網址服務,可能很多朋友都已經不再陌生,現在大部分微博、手機郵件提醒等地方已經有很多應用模式了,並占據了一定的市場。估計很多朋友現在也正在使用。

短鏈接的好處:

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進行跳轉。

總結

以上就是這篇文章的全部內容,希望對大家的學習或者工作帶來一定的幫助,如果有疑問大家可以留言交流。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved