短連結,通俗來說,就是將長的URL 網址,通過程式計算等方式,轉換為簡短的網址字串。
這樣的話其好處為:1、內容需要;2、方便使用;3、便於管理。
早期短連結廣泛應用於圖片上傳網站,通過縮短網址URL連結字數,達到減少代碼字串的目的。更便於使用者引用網址,寫入代碼中,“節省”字元數空間。常見於網店圖片分類的使用,因有字元限制,運用短連結,達到外鏈圖片的目的。自微博盛行以來,在微博字數有限的特色下,短連結也盛行於微博網站,以節省字數,給博主發布更多文字的空間。
<?php/** * 由長串連產生短連結操作 * * 演算法描述:使用6個字元來表示短連結,我們使用ASCII字元中的'a'-'z','0'-'9','A'-'Z',共計62個字元做為集合。 * 每個字元有62種狀態,六個字元就可以表示62^6(56800235584),那麼如何得到這六個字元, * 具體描述如下: * 1. 對傳入的長URL+設定key值 進行Md5,得到一個32位的字串(32 字元十六進位數),即16的32次方; * 2. 將這32位分成四份,每一份8個字元,將其視作16進位串與0x3fffffff(30位1)與操作, 即超過30位的忽略處理; * 3. 這30位分成6段, 每5個一組,算出其整數值,然後映射到我們準備的62個字元中, 依次進行獲得一個6位的短連結地址。 * * @author flyer0126 * @since 2012/07/13 */function shortUrl( $long_url ){ $key = 'flyer0126'; $base32 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // 利用md5演算法方式產生hash值 $hex = hash('md5', $long_url.$key); $hexLen = strlen($hex); $subHexLen = $hexLen / 8; $output = array(); for( $i = 0; $i < $subHexLen; $i++ ) { // 將這32位分成四份,每一份8個字元,將其視作16進位串與0x3fffffff(30位1)與操作 $subHex = substr($hex, $i*8, 8); $idx = 0x3FFFFFFF & (1 * ('0x' . $subHex)); // 這30位分成6段, 每5個一組,算出其整數值,然後映射到我們準備的62個字元 $out = ''; for( $j = 0; $j < 6; $j++ ) { $val = 0x0000003D & $idx; $out .= $base32[$val]; $idx = $idx >> 5; } $output[$i] = $out; } return $output;} $url = 'http://flyer0126.iteye.com/';$ret = shortUrl($url);var_dump($ret);################ 列印結果 ################/* array(4) {[0]=>string(6) "2aEzqe"[1]=>string(6) "Rj6Bve"[2]=>string(6) "f2mQvi"[3]=>string(6) "z2eqYv"} */
#將url與短連結結果存入資料庫,取其中一個用於顯示即可。