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

PHP 動態麵包屑導航:從 REQUEST_URI 自動解析目錄層級

     編輯:PHP 綜合知識

功能簡介

本程式無需資料庫、無需預先定義站點結構,單純解析 $_SERVER['REQUEST_URI'],自動產生類似「首頁 > 服務項目 > 家教中心」的麵包屑導航。支援自訂目錄名稱對應中文標籤,極適合靜態化程度高、目錄結構固定的中小型網站。

完整程式碼(已修正語法與安全性)

<?php
$d_label = array(
    "service" => "有償服務",
    "teach"   => "家教中心",
    "union"   => "校園服務聯盟",
    "job"     => "學生兼職",
    "free"    => "信息庫"
);

$directory = $_SERVER['REQUEST_URI'];
// 移除查詢字串
if (($pos = strpos($directory, '?')) !== false) {
    $directory = substr($directory, 0, $pos);
}

$d_komplettx = '';
while ($directory != '/' && $directory != '') {
    $d_text = basename($directory);
    // 目錄名對應中文標籤
    if (isset($d_label[$d_text])) {
        $d_text = $d_label[$d_text];
    }
    $d_link = $directory;
    // 組裝導航片段(從最深層往根疊加)
    $d_curx = "-><a href=\"" . htmlspecialchars($d_link) . "\">" . htmlspecialchars($d_text) . "</a>";
    $d_komplettx = $d_curx . $d_komplettx;
    $directory = dirname($directory);
}

// 輸出完整導航
echo "欄目導航:" . $d_komplettx;
?>

執行範例

假設目前網址為 https://example.com/service/teach/intro.php

  1. 第一輪:$directory = "/service/teach/intro.php" → basename = "intro.php"(無對應標籤)
  2. dirname → "/service/teach"
  3. 第二輪:basename = "teach" → 對應「家教中心」
  4. dirname → "/service"
  5. 第三輪:basename = "service" → 對應「有償服務」
  6. dirname → "/" 結束

輸出結果:

欄目導航:->有償服務->家教中心->intro.php

進階擴充建議

需求實作方向
排除副檔名$d_text = pathinfo($d_text, PATHINFO_FILENAME);
首頁固定顯示「首頁」迴圈結束後 $d_komplettx = "-><a href=\"/\">首頁</a>" . $d_komplettx;
支援多語系$d_label 改從語系檔或資料庫讀取
SEO 結構化資料輸出 itemscope itemtype="https://schema.org/BreadcrumbList" 微資料
快取優化將解析結果存入 APCu/Redis,Key 為 REQUEST_URI

安全性注意

  • 輸出前務必 htmlspecialchars() 防 XSS。
  • 若網站部署在子目錄(如 /~user/site/),需先移除基礎路徑前綴。
  • 避免直接信任 REQUEST_URI 進行檔案系統操作(本程式僅做字串解析,風險較低)。

結語

這段不到 20 行的程式碼,以極低成本解決了中小型站點的導航問題。其核心思想——「約定優於配置,利用 URL 結構反映資訊架構」——正是 RESTful 設計與現代靜態站點生成器(如 Hugo、VitePress)的基礎哲學之一。

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