當前位置: 首頁> 最新文章列表> 構建自定義BBCode 轉換器

構建自定義BBCode 轉換器

M66 2025-05-31

在PHP 中處理文本格式化,經常會用到BBCode(一種簡化的標記語言),它允許用戶通過簡單的標籤來添加文本樣式,如粗體、斜體、鏈接等。本文將演示如何使用mb_eregi_replace函數,構建一個簡單的自定義BBCode 轉換器,將BBCode 標籤轉換為對應的HTML 標籤。


什麼是mb_eregi_replace?

mb_eregi_replace是PHP 中一個用於多字節字符串的正則表達式替換函數,支持不區分大小寫的匹配。它的優勢在於能正確處理UTF-8 等多字節編碼的文本,非常適合中文環境下的文本處理。

函數原型:

 mb_eregi_replace(string $pattern, string $replacement, string $string): string
  • $pattern :匹配模式(正則表達式)

  • $replacement :替換內容

  • $string :待處理的字符串


示例:使用mb_eregi_replace 實現簡單的BBCode 轉換器

下面的示例演示瞭如何將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,建議結合正則分組和遞歸解析,或使用專門的解析庫。