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

PHP UBB 編碼轉換器:論壇標籤轉 HTML 完整實作

     編輯:PHP 綜合知識

UBB(Universal Bulletin Board)碼是早期論壇常用的輕量標記語言。本文提供一個完整的 PHP 函數 get_ubb(),可將常見 UBB 標籤轉換為對應 HTML,支援粗體、斜體、底線、對齊、連結、圖片、影音、字型樣式等。

核心轉換函數

function get_ubb($ubb) {
    // 基礎文字樣式
    $ubb = preg_replace("/\[B\](.*)\[\/B\]/", "\\1", $ubb);
    $ubb = preg_replace("/\[I\](.*)\[\/I\]/", "\\1", $ubb);
    $ubb = preg_replace("/\[U\](.*)\[\/U\]/", "\\1", $ubb);
    
    // 對齊
    $ubb = preg_replace("/\[LEF\](.*)\[\/LEF\]/", "
\\1
", $ubb); $ubb = preg_replace("/\[MID\](.*)\[\/MID\]/", "
\\1
", $ubb); $ubb = preg_replace("/\[RIG\](.*)\[\/RIG\]/", "
\\1
", $ubb); // 連結與郵件 $ubb = preg_replace("/\[LINK\](.*)\[\/LINK\]/", "\\1", $ubb); $ubb = preg_replace("/\[EMAIL\](.*)\[\/EMAIL\]/", "\\1", $ubb); // 多媒體 $ubb = preg_replace("/\[IMAGE\](.*)\[\/IMAGE\]/", "", $ubb); $ubb = preg_replace("/\[FLASH\](.*)\[\/FLASH\]/", "" . "", $ubb); $ubb = preg_replace("/\[MUSIC\](.*)\[\/MUSIC\]/", "", $ubb); // 表情符號(需對應圖片目錄) $ubb = preg_replace("/\[PHOTO=(\d+)\]/", "", $ubb); // 字型樣式 $ubb = preg_replace("/\[FONT=([^\]]+)\](.*)\[\/FONT\]/", "\\2", $ubb); $ubb = preg_replace("/\[FONT-SIZE=(\d+)\](.*)\[\/FONT-SIZE\]/", "\\2", $ubb); $ubb = preg_replace("/\[FONT-COLOR=([^\]]+)\](.*)\[\/FONT-COLOR\]/", "\\2", $ubb); return $ubb; }

使用範例

$input = "[FONT=微軟正黑體]標題[/FONT] 
[MID]置中內容[/MID]
[LINK]https://example.com[/LINK]
[IMAGE]https://example.com/photo.jpg[/IMAGE]
[FONT-COLOR=#ff0000]紅色文字[/FONT-COLOR]";

echo get_ubb($input);

安全性與擴充建議

  • XSS 防護:實際部署前務必對輸入進行 htmlspecialchars() 或使用 HTML Purifier 過濾
  • 貪婪匹配風險:上述正則使用 .* 為貪婪模式,巢狀標籤可能錯誤;建議改用 .*? 非貪婪或狀態機解析
  • 擴充性:可將標籤對應表改為陣列配置,便於維護新增
  • 現代替代方案:新專案建議採用 Markdown(如 erusev/parsedown)或 BBCode 專用解析器(jbbcode/jbbcode)

完整測試碼

<?php
$test = "[B]粗體[/B] [I]斜體[/I] [U]底線[/U]
[MID]置中[/MID] [LINK]https://test.com[/LINK] [IMAGE]https://test.com/img.png[/IMAGE]
[FONT=Arial]字型[/FONT] [FONT-SIZE=18]大字[/FONT-SIZE] [FONT-COLOR=blue]藍色[/FONT-COLOR]";
echo get_ubb($test);
?>

此函數適合維護舊式論壇系統或簡易留言板,新專案請評估更現代的標記語言方案。

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