当前位置: 首页> 最新文章列表> 构建自定义 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,建议结合正则分组和递归解析,或使用专门的解析库。