C# 实现 HTML 与 UBB 标签互转的代码示例
在开发支持富文本编辑或兼容传统论坛格式的 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, "&", "&");
_Html = Regex.Replace(_Html, " ", " ");
_Html = Regex.Replace(_Html, "<", "<");
_Html = Regex.Replace(_Html, ">", ">");
第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/>,空格转为 ,并将基本文本样式映射回 HTML 标签。
content = Regex.Replace(content, @"\r\n", "<br/>");
content = Regex.Replace(content, " ", " ");
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# 正则表达式应用与标记语言转换的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













