Heim > Backend-Entwicklung > PHP-Tutorial > PHP implementiert den Kurzlink-Vorgang zur Generierung langer URL-Verbindungen

PHP implementiert den Kurzlink-Vorgang zur Generierung langer URL-Verbindungen

巴扎黑
Freigeben: 2016-11-23 11:44:31
Original
2418 Leute haben es durchsucht

Ein kurzer Link besteht für Laien darin, eine lange URL durch Programmberechnung und andere Methoden in eine kurze URL-Zeichenfolge umzuwandeln.

Die Vorteile davon sind: 1. Inhaltliche Anforderungen; 2. Benutzerfreundlichkeit; 3. Einfache Verwaltung;

Frühe Kurzlinks wurden häufig auf Websites zum Hochladen von Bildern verwendet, indem die Anzahl der URL-Linkwörter verkürzt wurde, um den Zweck der Reduzierung von Codezeichenfolgen zu erreichen. Für Benutzer ist es einfacher, die URL zu zitieren und in den Code zu schreiben, um Platz für Zeichen zu „sparen“. Es wird häufig bei der Bildklassifizierung in Online-Shops verwendet. Aufgrund von Zeichenbeschränkungen werden kurze Links verwendet, um den Zweck externer Linkbilder zu erreichen. Seit der Beliebtheit von Weibo sind aufgrund der begrenzten Zeichenanzahl von Weibo auch kurze Links auf Weibo-Websites beliebt geworden, um die Wortzahl zu sparen und Bloggern Raum für die Veröffentlichung von mehr Text zu geben.

<?php
/**
 * 由长连接生成短链接操作
 * 
 * 算法描述:使用6个字符来表示短链接,我们使用ASCII字符中的&#39;a&#39;-&#39;z&#39;,&#39;0&#39;-&#39;9&#39;,&#39;A&#39;-&#39;Z&#39;,共计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 = &#39;flyer0126&#39;;
    $base32 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    
    // 利用md5算法方式生成hash值
    $hex = hash(&#39;md5&#39;, $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 * (&#39;0x&#39; . $subHex));
   
    // 这30位分成6段, 每5个一组,算出其整数值,然后映射到我们准备的62个字符
    $out = &#39;&#39;;
    for( $j = 0; $j < 6; $j++ )
    {
    $val = 0x0000003D & $idx;
    $out .= $base32[$val];
    $idx = $idx >> 5;
    }
    $output[$i] = $out;
    }
    
    return $output;
}
  
$url = &#39;http://flyer0126.iteye.com/&#39;;
$ret = shortUrl($url);
var_dump($ret);
################ 打印结果 ################
/* array(4) {
[0]=>
string(6) "2aEzqe"
[1]=>
string(6) "Rj6Bve"
[2]=>
string(6) "f2mQvi"
[3]=>
string(6) "z2eqYv"
} */
Nach dem Login kopieren

# Speichern Sie die URL- und Kurzlink-Ergebnisse in der Datenbank und wählen Sie eines davon zur Anzeige aus.


Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage