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

高效能 UBBCode 解析函式:單一函式支援常見標籤轉換

     編輯:PHP 綜合知識

函式特色

  • 單一 ubb() 函式處理所有常見 UBB 標籤
  • 採用 eregi_replace()(不分大小寫)與 preg_replace()(支援貪婪/非貪婪模式)混合
  • 程式碼精簡,執行速度快,易於維護擴充

完整函式代碼

function ubb($str) {
    $color = array('red', 'blue', 'green');

    // URL 處理:三種格式
    $str = eregi_replace('\[url\]([a-zA-Z0-9@:%_.~#-\?&]+)\[/url\]',
                         '\\1', $str);
    $str = eregi_replace('\[url=https://([a-zA-Z0-9@:%_.~#-\?&]+)\](.+)\[/url\]',
                         '\\2', $str);
    $str = eregi_replace('\[url=([a-zA-Z0-9@:%_.~#-\?&]+)\](.+)\[/url\]',
                         '\\2', $str);

    // 圖片
    $str = eregi_replace('\[img\]([a-zA-Z0-9@:%_.~#-\?&]+)\[/img\]',
                         '', $str);

    // 標題 H1-H6
    $str = eregi_replace('\[h([1-6])\](.+)\[/h[1-6]\]',
                         '\\2', $str);

    // Email
    $str = eregi_replace('\[email\]([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})\[/email\]',
                         '\\1', $str);
    $str = eregi_replace('\[email=([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})\](.+)\[/email\]',
                         '\\2', $str);

    // 文字樣式
    $str = eregi_replace('\[b\](.+)\[/b\]', '\\1', $str);
    $str = eregi_replace('\[i\](.+)\[/i\]', '\\1', $str);
    $str = eregi_replace('\[size=(.+)\](.+)\[/size\]', '\\2', $str);
    $str = eregi_replace('\[color=(.+)\](.+)\[/color\]', '\\2', $str);

    // 上下標
    $str = eregi_replace('\[sub\](.+)\[/sub\]', '\\1', $str);
    $str = eregi_replace('\[sup\](.+)\[/sup\]', '\\1', $str);

    // 顏色快捷標籤
    for ($i = 0; $i < count($color); $i++) {
        $str = eregi_replace('\['.$color[$i].'\](.+)\[/'.$color[$i].'\]',
                             '\\1', $str);
    }

    // 區塊標籤:使用 preg_replace 非貪婪模式 (.*?)
    $str = preg_replace("/\[quote\](.+?)\[\/quote\]/is",
                        "
quote:
\\1
", $str); $str = preg_replace("/\[code\](.+?)\[\/code\]/is", "
code:
\\1
", $str); $str = preg_replace("/\[sig\](.+?)\[\/sig\]/is", "


--------------------------
\\1
--------------------------
", $str); return $str; }

支援標籤對照表

UBB 標籤輸出 HTML備註
[url]...[/url]<a href="https://...">...</a>自動補 https://
[url=https://...]文字[/url]<a href="..." target="_blank">文字</a>新視窗開啟
[img]https://...[/img]<img src="https://...">
[h1]~[h6]標題[/h1]~[/h6]<h1>~<h6>標題</h1>~</h6>
[email]mail@domain[/email]<a href="mailto:mail@domain">mail@domain</a>
[b]粗體[/b]<b>粗體</b>
[i]斜體[/i]<i>斜體</i>
[size=n]文字[/size]<font size="n">文字</font>
[color=red]文字[/color]<font color="red">文字</font>亦支援 [red]文字[/red] 快捷寫法
[sub]下標[/sub]<sub>下標</sub>
[sup]上標[/sup]<sup>上標</sup>
[quote]引用[/quote]引用區塊(灰底、縮排、水平線)非貪婪匹配,支援巢狀
[code]程式碼[/code]程式碼區塊(等寬字體、藍線框)
[sig]簽名[/sig]簽名檔區塊(深綠、靠左、分隔線)

使用範例

$input = "[b]歡迎[/b]來到[url=https://example.com]範例網站[/url]!\n[quote]這是引用內容[/quote]";
echo ubb($input);

輸出:<b>歡迎</b>來到<a href="https://example.com" target="_blank">範例網站</a>!<blockquote>...</blockquote>

現代化改進建議

  • 棄用 eregi_replace()(PHP 5.3+ 移除),改用 preg_replace() 並加 i 修飾符。
  • 引入 HTMLPurifier 或類似庫,防止 XSS 攻擊(現行實作未對屬性值跳脫)。
  • 支援巢狀標籤解析(目前單層替換可能失效)。
  • 將正則模式編譯快取,避免重複編譯開銷。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved