当前位置: 首页> 最新文章列表> 如何通过 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