首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 實作短網址生成器:Base62 編碼演算法完整範例

     編輯:PHP 相關知識

PHP 實作短網址生成器:Base62 編碼演算法完整範例

短網址服務核心在於將長網址映射為短代碼。本文示範以 crc32 雜湊長網址,再以 Base62(0-9, a-z, A-Z)編碼為短代碼的完整實作,包含 HTML 表單與 PHP 後端邏輯。

前端表單 index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8"><title>URL Shortener</title></head>
<body>
<form action="urlShort.php" method="post">
    <input type="text" name="url" size="40" placeholder="輸入欲縮短的網址">
    <input type="submit" value="生成短網址">
</form>
</body>
</html>

後端邏輯 urlShort.php

<?php
header("Content-Type: text/html; charset=UTF-8");

/** Base62 編碼:0-9, A-Z, a-z */
function base62($x) {
    $show = '';
    while ($x > 0) {
        $s = $x % 62;
        if ($s > 35) {          // 36-61 -> a-z
            $s = chr($s + 61);
        } elseif ($s > 9) {     // 10-35 -> A-Z
            $s = chr($s + 55);
        }                       // 0-9 保持數字
        $show .= $s;
        $x = floor($x / 62);
    }
    return $show ?: '0';
}

/** 產生短代碼 */
function url_short($url) {
    $hash = crc32($url);           // 32 位無號整數
    $unsigned = sprintf("%u", $hash); // 轉無號字串
    return base62($unsigned);
}

if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['url'])) {
    $short = url_short($_POST['url']);
    echo "生成的短代碼:<a href='{$_POST['url']}' target='_blank'>$short</a>";
}
?>

演算法流程圖解

  1. 輸入長網址 https://example.com/very/long/path
  2. crc32() 計算 32-bit 雜湊值(如 1234567890)
  3. sprintf("%u") 確保無號整數字串
  4. base62() 將整數轉為 62 進位字串(如 3y7)
  5. 短網址為 https://your.domain/3y7

擴充建議

  • 實際部署需建立資料表儲存 short_code -> long_url 映射,並處理碰撞(crc32 碰撞機率約 1/40 億,可接受)。
  • 若需更短代碼,可用 md5 取前 64 位再 Base62,或引入分散式 ID 生成器(Snowflake)。
  • Base62 字元集可自訂排序,避免易混淆字元(如 0/O, 1/l)。

參考資源

更多短網址演算法討論:PHP 短網址生成原理與實現

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved