短鏈接,通俗來說,就是將長的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與短連結結果存入資料庫,取其中一個用於顯示即可。