欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

短鏈接的好處:

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

下面是用PHP實(shí)現(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é),對(duì)每段進(jìn)行計(jì)算,一共可以生成四組短連接
    for ($i = 0; $i < 4; $i++) {
      $urlhash_piece = substr($urlhash, $i * $len / 4, $len / 4);
      
      //將分段的位與0x3fffffff做位與,0x3fffffff表示二進(jìn)制數(shù)的30個(gè)1,即30位以后的加密串都?xì)w零
      //此處需要用到hexdec()將16進(jìn)制字符串轉(zhuǎn)為10進(jìn)制數(shù)值型,否則運(yùn)算會(huì)不正常
      $hex = hexdec($urlhash_piece) & 0x3fffffff;
 
      //域名根據(jù)需求填寫(xiě)
      $short_url = "http://t.cn/";
      
      //生成6位短網(wǎng)址
      for ($j = 0; $j < 6; $j++) {
        
        //將得到的值與0x0000003d,3d為61,即charset的坐標(biāo)最大值
        $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)址中的第一組即可。

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

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)或者工作帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。

相關(guān)文章

  • PHP請(qǐng)求Socket接口測(cè)試實(shí)例

    PHP請(qǐng)求Socket接口測(cè)試實(shí)例

    下面小編就為大家?guī)?lái)一篇PHP請(qǐng)求Socket接口測(cè)試實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • Laravel5.7 Eloquent ORM快速入門(mén)詳解

    Laravel5.7 Eloquent ORM快速入門(mén)詳解

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

    PHP使用遞歸生成文章樹(shù)

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

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

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

    php兩點(diǎn)地理坐標(biāo)距離的計(jì)算方法

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

    php生成圖形(Libchart)實(shí)例

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

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

    這篇文章主要介紹了使用symfony命令創(chuàng)建項(xiàng)目的方法,結(jié)合實(shí)例形式分析了Symfony命令的使用方法與項(xiàng)目創(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實(shí)現(xiàn)爬取和分析知乎用戶數(shù)據(jù)

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

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

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

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

最新評(píng)論