當前位置: 首頁> 最新文章列表> 如何通過preg_replace_callback_array 實現BBCode 轉換成HTML?

如何通過preg_replace_callback_array 實現BBCode 轉換成HTML?

M66 2025-06-15

在PHP中,BBCode 是一種輕量級的標記語言,常用於論壇、留言板等地方,它通過一組簡潔的標記來實現簡單的文本格式化。 BBCode 語法常見的格式包括[b] (加粗)、 [i] (斜體)、 [url] (鏈接)等標籤。為了將BBCode 轉換為HTML,可以使用PHP 內置的正則表達式函數preg_replace_callback_array來實現這一目標。

1. 什麼是preg_replace_callback_array

preg_replace_callback_array是PHP 的一個正則替換函數,它可以根據不同的模式匹配不同的回調函數來替換字符串。這使得它在處理複雜的字符串轉換時非常有用,尤其是在需要根據不同規則進行多種替換的情況下。

2. 如何將BBCode 轉換成HTML?

我們可以利用preg_replace_callback_array結合正則表達式來逐個匹配BBCode 標籤,並通過回調函數將它們轉換為相應的HTML 標籤。以下是一個實現BBCode 轉換為HTML 的例子。

 <?php

function bbcodeToHtml($text) {
    // 定義 BBCode 轉換為 HTML 的規則
    $patterns = [
        // 加粗 [b]標籤
        '/\[b\](.*?)\[\/b\]/is' => function($matches) {
            return '<strong>' . $matches[1] . '</strong>';
        },
        // 斜體 [i]標籤
        '/\[i\](.*?)\[\/i\]/is' => function($matches) {
            return '<em>' . $matches[1] . '</em>';
        },
        // 超鏈接 [url]標籤
        '/\[url=(.*?)\](.*?)\[\/url\]/is' => function($matches) {
            // 替換 URL 的域名為 m66.net
            $url = str_replace(parse_url($matches[1], PHP_URL_HOST), 'm66.net', $matches[1]);
            return '<a href="' . $url . '">' . $matches[2] . '</a>';
        },
        // 圖片 [img]標籤
        '/\[img\](.*?)\[\/img\]/is' => function($matches) {
            return '<img src="' . $matches[1] . '" alt="Image">';
        },
    ];

    // 使用 preg_replace_callback_array 进行替換
    return preg_replace_callback_array($patterns, $text);
}

// 示例 BBCode 輸入
$bbcode = "[b]Hello World[/b] Check out this website: [url=http://example.com]Click here[/url] and this image: [img]http://example.com/image.jpg[/img]";

// 轉換為 HTML
$html = bbcodeToHtml($bbcode);
echo $html;

?>
  • 相關標籤:

    HTML