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);
htmlspecialchars() 或使用 HTML Purifier 過濾.* 為貪婪模式,巢狀標籤可能錯誤;建議改用 .*? 非貪婪或狀態機解析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);
?>
此函數適合維護舊式論壇系統或簡易留言板,新專案請評估更現代的標記語言方案。