PHP將URL轉(zhuǎn)換成短網(wǎng)址的算法分享
前言
短網(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ù)需求填寫
$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)訪問時(shí),從數(shù)據(jù)庫(kù)中取出匹配的原網(wǎng)址,通過301或header進(jìn)行跳轉(zhuǎn)。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)或者工作帶來一定的幫助,如果有疑問大家可以留言交流。
- 一個(gè)php短網(wǎng)址的生成代碼(仿微博短網(wǎng)址)
- PHP生成短網(wǎng)址的3種方法代碼實(shí)例
- php簡(jiǎn)單實(shí)現(xiàn)短網(wǎng)址(短鏈)還原的方法(測(cè)試可用)
- PHP生成短網(wǎng)址方法匯總
- PHP長(zhǎng)網(wǎng)址與短網(wǎng)址的實(shí)現(xiàn)方法
- php生成短網(wǎng)址示例
- PHP通過調(diào)用新浪API生成t.cn格式短網(wǎng)址鏈接的方法詳解
- PHP生成短網(wǎng)址的思路以及實(shí)現(xiàn)方法的詳解
- PHP利用DWZ.CN服務(wù)生成短網(wǎng)址
- php 短鏈接算法收集與分析
- php調(diào)用新浪短鏈接API的方法
- php生成短網(wǎng)址/短鏈接原理和用法實(shí)例分析
相關(guān)文章
php實(shí)現(xiàn)HTML實(shí)體編號(hào)與非ASCII字符串相互轉(zhuǎn)換類實(shí)例
本篇文章主要介紹了"php實(shí)現(xiàn)HTML實(shí)體編號(hào)與非ASCII字符串相互轉(zhuǎn)換類實(shí)例",主要涉及到HTML實(shí)體編號(hào)與非ASCII字符串相互轉(zhuǎn)換類方面的內(nèi)容,感興趣的同學(xué)可以參考一下。2016-11-11
PHP使用mysqli同時(shí)執(zhí)行多條sql查詢語句的實(shí)例
今天小編就為大家分享一篇關(guān)于PHP使用mysqli同時(shí)執(zhí)行多條sql查詢語句的實(shí)例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03
C#使用PHP服務(wù)端的Web Service通信實(shí)例
這篇文章主要介紹了C#使用PHP服務(wù)端的Web Service通信實(shí)例,需要的朋友可以參考下2014-04-04
Apache啟動(dòng)報(bào)錯(cuò)No space left on device: AH00023該怎么解決
最近有朋友說:Apache啟動(dòng)報(bào)錯(cuò)No space left on device: AH00023,是怎么回事,該怎么解決呢?經(jīng)過小編的一番折騰,問題解決,下面把解決辦法分享給大家,需要的朋友可以參考下2015-10-10
Zend Framework教程之Zend_Registry對(duì)象用法分析
這篇文章主要介紹了Zend Framework教程之Zend_Registry對(duì)象用法,結(jié)合實(shí)例形式分析了對(duì)象注冊(cè)表Zend_Registry的具體功能與相關(guān)使用技巧,需要的朋友可以參考下2016-03-03
Laravel5.1 框架模型創(chuàng)建與使用方法實(shí)例分析
這篇文章主要介紹了Laravel5.1 框架模型創(chuàng)建與使用方法,結(jié)合實(shí)例形式分析了laravel5.1框架模型的原理、創(chuàng)建、更新、獲取等相關(guān)操作技巧,需要的朋友可以參考下2020-01-01
Yii框架實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的CURD操作示例
這篇文章主要介紹了Yii框架實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的CURD操作,結(jié)合實(shí)例形式分析了Yii框架連接數(shù)據(jù)庫(kù)與CURD增刪改查等常見操作技巧,需要的朋友可以參考下2019-09-09
Windows7下PHP開發(fā)環(huán)境安裝配置圖文方法
備花點(diǎn)時(shí)間學(xué)習(xí)下PHP,于是在自己機(jī)器上配置了下PHP的開發(fā)和運(yùn)行環(huán)境。之前在Windows Server 2003 OS中手工配置過,WEB服務(wù)器是IIS。這次是在自己機(jī)器上配置,找了個(gè)簡(jiǎn)單方式。2010-05-05

