C# 实现 HTML 与 UBB 标签互转的代码示例

认真发呆
认真发呆
发布时间:2026-10-14| 4人浏览过
原创

在开发支持富文本编辑或兼容传统论坛格式的 Web 应用时,常需在不同标记语言间进行转换。本文将展示如何在 C# 中实现 HTML 到 UBB(Bulletin Board Code)的单向清洗与格式化,以及从 UBB 还原为标准 HTML 的双向映射逻辑。

HTML 转为 UBB 的核心逻辑

HTML 转 UBB 的主要目的是去除样式信息,保留基础排版结构,并剔除潜在的安全风险(如事件处理器)。以下为关键的处理步骤:

第1步:处理换行与水平线

将常见的段落换行标签替换为换行符,并将分割线转换为对应的 UBB 标签。

_Html = Regex.Replace(_Html, "<br[^>]*>", "\n");
_Html = Regex.Replace(_Html, @"<p[^>\/]*\/>", "\n");
_Html = Regex.Replace(_Html, "<hr[^>]*>", "[hr]");

第2步:清理脚本与属性注入

移除带有 on 开头的事件属性(如 onclick),以防止 XSS 攻击,同时清除多余的空格和无效实体。

// 移除类似 onxxx="value" 的属性
_Html = Regex.Replace(_Html, "\\son[\\w]{3,16}\\s?=\\s*([\'\"]).+?\\1", "");
// 处理 HTML 实体编码
_Html = Regex.Replace(_Html, "&amp;", "&");
_Html = Regex.Replace(_Html, "&nbsp;", " ");
_Html = Regex.Replace(_Html, "&lt;", "<");
_Html = Regex.Replace(_Html, "&gt;", ">");

第3步:映射常用格式标签

将加粗、斜体、引用等常见 HTML 标签映射为 UBB 格式。注意图片链接在此阶段可能被简化或移除,具体视需求而定。

// 处理引用块
_Html = Regex.Replace(_Html, "<(\\/)?blockquote([^>]*)>", "[$1blockquote]");
// 处理加粗
_Html = Regex.Replace(_Html, "<b>(.+?)</b>", @"\[b\]$1\[/b\]");
// 处理链接:将 href 和文本分离
_Html = Regex.Replace(_Html, "<a[^>]*href=[\'\"\\s]*([^\\s\'\"]*)[^>]*>(.+?)<\\/a>", "[url=$1]$2[/url]");
// 最终清除未匹配的其他 HTML 标签
_Html = Regex.Replace(_Html, "<[^>]*?>", "");

UBB 转回 HTML 的实现

当需要展示用户输入的 UBB 内容时,需将其安全地转译为标准 HTML。此过程同样依赖正则表达式的精确匹配。

第4步:基础字符与段落映射

将换行符转为 <br/>,空格转为 &nbsp;,并将基本文本样式映射回 HTML 标签。

content = Regex.Replace(content, @"\r\n", "<br/>");
content = Regex.Replace(content, " ", "&nbsp;");
content = Regex.Replace(content, @"\[b\](.+?)\[/b\]", "<b>$1</b>");
content = Regex.Replace(content, @"\[i\](.+?)\[/i\]", "<i>$1</i>");
content = Regex.Replace(content, @"\[u\](.+?)\[/u\]", "<u>$1</u>");

第5步:复杂结构与多媒体处理

处理对齐方式、超链接、引用块及图片嵌入。注意链接和引用块的转译需确保输出符合 HTML 规范。

// 段落与对齐处理
content = Regex.Replace(content, @"\[p\](.+?)\[/p\]", "<p class='load'>$1</p>");
content = Regex.Replace(content, @"\[align=center\](.+?)\[/align\]", "<div style='text-align:center;'>$1</div>"); // 建议修正原代码中的非法标签

// 链接处理:带名称和无名称两种情况
content = Regex.Replace(content, @"\[url=(?<url>.+?)](?<name>.+?)\[/url]", "<a href='${url}' target='_blank'>${name}</a>");

// 引用块
content = Regex.Replace(content, @"\[quote](?<text>.+?)\[/quote]", "<div class='quote'>${text}</div>");

// 图片插入
content = Regex.Replace(content, @"\[img](?<img>.+?)\[/img]", "<img src='${img}' alt='' />");

上述代码片段提供了 C# 环境下 HTML 与 UBB 相互转换的基础框架。开发者可根据实际业务需求,调整正则表达式的捕获组以适配更复杂的标签变体。以上就是 C# 实现 HTML 和 UBB 互相转换的详细内容,更多关于 C# 正则表达式应用与标记语言转换的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。