UBB(Universal Bulletin Board)代碼是論壇常用的輕量標記語言。本文提供一個功能完整的 ubb2html() 函數,涵蓋常見標籤轉換、自動 URL 識別、圖片自適應縮放、引用/代碼區塊樣式化。
| UBB 標籤 | HTML 輸出 | 說明 |
|---|---|---|
| [b]...[/b] | <b>...</b> | 粗體 |
| [i]...[/i] | <i>...</i> | 斜體 |
| [u]...[/u] | <u>...</u> | 底線 |
| [center]...[/center] | <center>...</center> | 置中 |
| [quote]...[/quote] | 藍字引用區塊表格 | 引用回覆 |
| [code]...[/code] | 灰底代碼區塊表格 | 程式碼顯示 |
| [images]url[/images] | <img src="url" onload="auto-resize"> | 圖片自適應 |
| [url]url[/url] | <a href="url" target="_blank">url</a> | 自動連結 |
| [url=url]text[/url] | <a href="url" target="_blank">text</a> | 自訂連結文字 |
| [email]mail[/email] | <a href="mailto:mail">mail</a> | 郵箱連結 |
function ubb2html($content) {
global $article; // 假設全域配置
// 1. 自動識別 URL(可選)
if ($article['isparseurl'] == "1") {
$content = parseurl($content); // 需自行實現或引用
}
// 2. 基礎標籤替換(使用 eregi_replace 兼容大小寫,建議改用 preg_replace)
$content = eregi_replace('\[b\]', '<b>', $content);
$content = eregi_replace('\[/b\]', '</b>', $content);
$content = eregi_replace('\[i\]', '<i>', $content);
$content = eregi_replace('\[/i\]', '</i>', $content);
$content = eregi_replace('\[u\]', '<u>', $content);
$content = eregi_replace('\[/u\]', '</u>', $content);
$content = eregi_replace('\[center\]', '<center>', $content);
$content = eregi_replace('\[/center\]', '</center>', $content);
// 3. 複雜區塊標籤(引用、代碼)
$content = eregi_replace('\[quote\]',
'<table width="96%" border="0" cellspacing="3" cellpadding="0" style="word-break:break-all" align="center"><tr><td><b>引用:</b></td></tr><tr><td><hr width="100%" noshade></td></tr><tr><td class="content"><font color="#0000FF">', $content);
$content = eregi_replace('\[/quote\]', '</font></td></tr><tr><td><hr width="100%" noshade></td></tr></table>', $content);
$content = eregi_replace('\[code\]',
'<table width="96%" border="0" cellspacing="3" cellpadding="0" style="word-break:break-all" align="center"><tr><td><b>代碼:</b></td></tr><tr><td><hr width="100%" noshade></td></tr><tr><td class="code"><font color="#0000FF">', $content);
$content = eregi_replace('\[/code\]', '</font></td></tr><tr><td><hr width="100%" noshade></td></tr></table>', $content);
// 4. 圖片、連結、郵箱(使用正則捕獲組)
$content = eregi_replace('\[images\]([^\[]*)\[/images\]',
'<a href="\\1" target="_blank"><img src="\\1" border=0 onload="if(this.width>screen.width-333)this.width=screen.width-333" title="點擊查看原圖"></a>', $content);
$content = eregi_replace('\[url\]www\.([^\[]*)\[/url\]', '<a href="https://www.\\1" target="_blank">www.\\1</a>', $content);
$content = eregi_replace('\[url\]([^\[]*)\[/url\]', '<a href="\\1" target="_blank">\\1</a>', $content);
$content = eregi_replace('\[url=([^\[]*)\]([^\[]*)\[/url\]', '<a href="\\1" target="_blank">\\2</a>', $content);
$content = eregi_replace('\[email\]([^\[]*)\[/email\]', '<a href="mailto:\\1">\\1</a>', $content);
return $content;
}
preg_replace_callback,避免 eregi_replace 棄用問題。<blockquote>、<pre><code>)。此函數是早期 PHP 論壇系統的核心組件,理解其原理有助於掌握輕量標記語言解析的基本模式。