亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PHP將URL轉(zhuǎn)換成短網(wǎng)址的算法分享

 更新時間:2016年09月13日 11:30:02   投稿:daisy  
短網(wǎng)址(Short URL)顧名思義就是在形式上比較短的網(wǎng)址。在Web 2.0的今天,不得不說這是一個潮流。目前已經(jīng)有許多類似服務(wù),借助短網(wǎng)址您可以用簡短的網(wǎng)址替代原來冗長的網(wǎng)址,讓使用者可以更容易的分享鏈接,下面來看看如何用PHP實現(xiàn)這個功能,有需要的朋友們可以參考。

前言

短網(wǎng)址服務(wù),可能很多朋友都已經(jīng)不再陌生,現(xiàn)在大部分微博、手機郵件提醒等地方已經(jīng)有很多應(yīng)用模式了,并占據(jù)了一定的市場。估計很多朋友現(xiàn)在也正在使用。

短鏈接的好處:

1、內(nèi)容需要;
2、用戶友好;
3、便于管理。

下面是用PHP實現(xiàn)短網(wǎng)址轉(zhuǎn)換的算法,代碼如下:

PHP

<?php
//短網(wǎng)址生成算法
class ShortUrl {
  
  //字符表
  public static $charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
 
  public static function encode($url)
  {
    $key = 'abc'; //加鹽
    $urlhash = md5($key . $url);
    $len = strlen($urlhash);
 
    //將加密后的串分成4段,每段4字節(jié),對每段進行計算,一共可以生成四組短連接
    for ($i = 0; $i < 4; $i++) {
      $urlhash_piece = substr($urlhash, $i * $len / 4, $len / 4);
      
      //將分段的位與0x3fffffff做位與,0x3fffffff表示二進制數(shù)的30個1,即30位以后的加密串都歸零
      //此處需要用到hexdec()將16進制字符串轉(zhuǎn)為10進制數(shù)值型,否則運算會不正常
      $hex = hexdec($urlhash_piece) & 0x3fffffff;
 
      //域名根據(jù)需求填寫
      $short_url = "http://t.cn/";
      
      //生成6位短網(wǎng)址
      for ($j = 0; $j < 6; $j++) {
        
        //將得到的值與0x0000003d,3d為61,即charset的坐標最大值
        $short_url .= self::$charset[$hex & 0x0000003d];
        
        //循環(huán)完以后將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);
?>

通常我們用四組網(wǎng)址中的第一組即可。

這里需要注意的是,這個算法是不可逆的,因此,通常的做法是將短網(wǎng)址和對應(yīng)的原網(wǎng)址存入數(shù)據(jù)庫,當訪問時,從數(shù)據(jù)庫中取出匹配的原網(wǎng)址,通過301或header進行跳轉(zhuǎn)。

總結(jié)

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

相關(guān)文章

  • PHP請求Socket接口測試實例

    PHP請求Socket接口測試實例

    下面小編就為大家?guī)硪黄狿HP請求Socket接口測試實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • Laravel5.7 Eloquent ORM快速入門詳解

    Laravel5.7 Eloquent ORM快速入門詳解

    這篇文章主要介紹了Laravel5.7 Eloquent ORM快速入門詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • PHP使用遞歸生成文章樹

    PHP使用遞歸生成文章樹

    寫遞歸函數(shù),可考慮緩存,定義一些靜態(tài)變量來存上一次運行的結(jié)果,多程序運行效率很有幫助.大概步驟如下:首先到數(shù)據(jù)庫取數(shù)據(jù),放到一個數(shù)組,然后把數(shù)據(jù)轉(zhuǎn)化為一個樹型狀的數(shù)組,最后把這個樹型狀的數(shù)組轉(zhuǎn)為html代碼。下面我們來看個實例
    2015-04-04
  • destoon實現(xiàn)調(diào)用自增數(shù)字從1開始的方法

    destoon實現(xiàn)調(diào)用自增數(shù)字從1開始的方法

    這篇文章主要介紹了destoon實現(xiàn)調(diào)用自增數(shù)字從1開始的方法,很有實用價值的一個技巧,需要的朋友可以參考下
    2014-08-08
  • php兩點地理坐標距離的計算方法

    php兩點地理坐標距離的計算方法

    這篇文章主要為大家詳細介紹了php兩點地理坐標距離的計算方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • php生成圖形(Libchart)實例

    php生成圖形(Libchart)實例

    統(tǒng)計圖形就我們會常到的數(shù)據(jù)圖形了,如果三個數(shù)組以圖形顯示或樓盤以圖形走向我們都會要用到圖形,下面介紹一個php LIbchart圖形生成類
    2013-11-11
  • 使用symfony命令創(chuàng)建項目的方法

    使用symfony命令創(chuàng)建項目的方法

    這篇文章主要介紹了使用symfony命令創(chuàng)建項目的方法,結(jié)合實例形式分析了Symfony命令的使用方法與項目創(chuàng)建的相關(guān)技巧,需要的朋友可以參考下
    2016-03-03
  • PHP_SELF,SCRIPT_NAME,REQUEST_URI區(qū)別

    PHP_SELF,SCRIPT_NAME,REQUEST_URI區(qū)別

    這篇文章主要介紹了PHP_SELF,SCRIPT_NAME,REQUEST_URI區(qū)別,需要的朋友可以參考下
    2014-12-12
  • php實現(xiàn)爬取和分析知乎用戶數(shù)據(jù)

    php實現(xiàn)爬取和分析知乎用戶數(shù)據(jù)

    本文給大家介紹的是利用php的curl編寫的爬取知乎用戶數(shù)據(jù)的爬蟲,并分析用戶的各種屬性,有需要的小伙伴可以參考下
    2016-01-01
  • thinkphp6如何使用中間件記錄行為日志

    thinkphp6如何使用中間件記錄行為日志

    這篇文章主要介紹了thinkphp6如何使用中間件記錄行為日志問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評論