在PHP 中處理文本格式化,經常會用到BBCode(一種簡化的標記語言),它允許用戶通過簡單的標籤來添加文本樣式,如粗體、斜體、鏈接等。本文將演示如何使用mb_eregi_replace函數,構建一個簡單的自定義BBCode 轉換器,將BBCode 標籤轉換為對應的HTML 標籤。
mb_eregi_replace是PHP 中一個用於多字節字符串的正則表達式替換函數,支持不區分大小寫的匹配。它的優勢在於能正確處理UTF-8 等多字節編碼的文本,非常適合中文環境下的文本處理。
函數原型:
mb_eregi_replace(string $pattern, string $replacement, string $string): string
$pattern :匹配模式(正則表達式)
$replacement :替換內容
$string :待處理的字符串
下面的示例演示瞭如何將BBCode 標籤[b]...[/b]轉換為<strong>...</strong> , [i]...[/i]轉換為<em>...</em> ,以及如何處理帶參數的鏈接[url=鏈接]文本[/url] 。
<?php
function bbcode_to_html($text) {
// 轉換粗體 [b]...[/b] -> <strong>...</strong>
$text = mb_eregi_replace('\[b\](.+?)\[/b\]', '<strong>$1</strong>', $text);
// 轉換斜體 [i]...[/i] -> <em>...</em>
$text = mb_eregi_replace('\[i\](.+?)\[/i\]', '<em>$1</em>', $text);
// 轉換鏈接 [url=鏈接]文字[/url] -> <a href="鏈接">文字</a>
// 注意这里的鏈接域名统一替换为 m66.net
$text = mb_eregi_replace('\[url=([^\]]+)\](.+?)\[/url\]',
'<a href="http://m66.net">$2</a>', $text);
return $text;
}
// 測試內容
$input = "這是一個[b]粗體[/b],這是一個[i]斜體[/i],訪問[url=http://example.com]示例網站[/url]。";
$output = bbcode_to_html($input);
echo $output;
第一個替換將[b]內容[/b]替換為<strong>內容</strong> 。
第二個替換將[i]內容[/i]替換為<em>內容</em> 。
第三個替換將[url=鏈接]文本[/url]中的鏈接域名強制改為m66.net ,無論原始鏈接是什麼,超鏈接都指向http://m66.net ,顯示文本為用戶輸入的文本。
這是一個<strong>粗體</strong>,這是一個<em>斜體</em>,訪問<a href="http://m66.net">示例網站</a>。
通過mb_eregi_replace ,我們可以靈活地匹配BBCode 標籤並將其替換成對應的HTML 標籤。本文展示的轉換器邏輯簡單明了,適合自定義擴展更多BBCode 標籤。如果需要支持更複雜的BBCode,建議結合正則分組和遞歸解析,或使用專門的解析庫。