跳到主要内容

BBCode 转 HTML 完全指南:论坛标记如何变成网页

BBCode 是论坛的方括号标记,浏览器不认。这篇讲清楚常见标签怎么映射到 HTML、迁移老论坛内容的做法,以及它和 Markdown 的真实区别。

发布于 作者 李雷
#bbcode #html #论坛迁移 #文本转换

BBCode 转 HTML 完全指南:论坛标记如何变成网页

如果你折腾过老论坛,大概见过满屏的方括号:[b][quote][img]。这套写法叫 BBCode,也就是 Bulletin Board Code,phpBB、vBulletin、Discuz 这些论坛系统都靠它让用户排版,又不至于把原始 HTML 直接交到用户手里。问题是,浏览器根本不认识方括号。一旦你想把论坛里的内容搬到博客、CMS 或者一个静态站点上,就得先把 BBCode 翻译成真正的 HTML。这篇就把这件事讲透。

BBCode 到底是什么

BBCode 诞生的初衷是安全。早年的论坛不敢让用户写 HTML,怕有人塞进 <script> 或者破坏页面结构,于是发明了一套用方括号包裹的标记:[b]加粗[/b][url=https://example.com]链接[/url]。论坛后台再把这些方括号转成受控的 HTML 标签,用户碰不到危险的部分。换句话说,BBCode 本质上是 HTML 的一个安全替身。它表达力没 HTML 强,但对发帖排版完全够用。

常见标签怎么映射到 HTML

转换的核心是一张标签对照表。说一个最具体的:[b] 对应 <b>(更现代的做法是转成 <strong>,语义更准)。其余的也都有固定归宿:

  • [i]<em>,[u]<u>,[s]<s>
  • [url=...]文字[/url]<a href="...">文字</a>
  • [img]地址[/img]<img src="地址">
  • [quote][quote=名字]<blockquote>
  • [list][*]<ul><li>
  • [color=red][size=18] 转成带内联样式的 <span>
  • [code]<pre><code>

看一个真实的输入输出例子。你粘进:

[b]粗体[/b]

转出来就是:

<strong>粗体</strong>

再复杂一点,[b][color=blue]促销[/color][/b] 会变成既加粗又变蓝的嵌套结构。一个靠谱的转换器会逐个标签遍历,把嵌套关系还原成嵌套的 HTML,而不是简单做字符串替换。我用 Toolora 的 BBCode 转 HTML 工具 试过一堆真实帖子,它先把原始文本转义,再处理标签,所以即便帖子里夹着 <script> 或者满是尖括号的报错日志,转出来的也只是无害的可见文字,不会真的执行。这一点对从论坛搬运不可信内容很关键。

迁移老论坛内容的实战做法

迁移最容易踩的坑是 [code] 块。设计上,[code][/code] 之间的内容必须保持原样,转义成实体后包进代码块,但里面的 BBCode 一律不解析。所以 [code][b]不会加粗[/b][/code] 应该原样显示 [b]不会加粗[/b] 这几个字符,而不是真把它加粗。如果你写脚本批量转换,一定要先把代码块单独抠出来处理,否则一篇讲 BBCode 用法的教程会被转换器自己破坏掉。

第二个坑是没闭合的标签。一个孤零零的 [b] 没有对应的 [/b],正确做法是当成普通文本留着,而不是去猜用户想加粗到哪。如果你转完发现一段文字莫名其妙全粗了,多半是某处漏了闭合标签,转换器一路加粗到了文末。批量迁移前先扫一遍标签配对,能省掉很多返工。迁移过程中如果还需要清理多余标签或处理实体,可以顺手用 清除 HTML 标签工具 把转好的 HTML 再压成纯文本做对比校验。

BBCode 和 Markdown 的真实区别

很多人把 BBCode 和 Markdown 当成一回事,其实差别不小。Markdown 追求的是写起来像纯文本,**粗体**# 标题[链接](url),读源码本身就顺眼。BBCode 不在乎源码好不好读,它在乎的是论坛后台能不能安全地把它转成受控 HTML,所以全是显式的方括号开闭标签。

落到使用场景上:Markdown 是写作者的工具,博客、文档、README 都在用;BBCode 是论坛系统的工具,几乎只活在留言板生态里。今天你接触 BBCode,基本都是因为要把老内容迁出来。如果你的目标平台吃 Markdown 而不是 HTML,可以先转成 HTML 再用 HTML 转 Markdown 工具 走第二程,两步拼起来就完成了从论坛标记到 Markdown 的完整迁移链路。

安全这件事别想反了

最后澄清一个常见误解。有人看到输入里有 <script> 标签,就以为转出来的 HTML 不安全。恰恰相反。正确的转换顺序是:先把原始文本整体转义成实体(&<>、双引号、单引号),再去匹配 BBCode 标签。这样一来,粘进来的 <script> 在转义那一步就变成了可见文字,根本没机会成为可执行标记;只有你明确写的那几个 BBCode 标签,才会被还原成一组固定已知的 HTML 元素。换句话说,转换器输出的 HTML 标签集合是封闭的、可控的,这正是 BBCode 当年被发明出来的理由。

把这套逻辑理顺,论坛内容迁移就不再是体力活。对照表、代码块隔离、闭合检查、转义优先,四件事做到位,几千条老帖也能干净地搬进现代网页。


Made by Toolora · Updated 2026-06-13