如何在C#中将html转换为BBcode

时间:2010-04-25 16:07:49

标签: c# html bbcode

我需要将 html 文本转换为 bbcodes 。我在哪里可以找到我应该怎么做?例如,我转换链接:

 regex = new Regex("<a href=\"(.+?)\">(.+?)</a>");
 htmlCode = regex.Replace(htmlCode, "[URL]$1[/URL]");

我如何转换bbcodes中的所有html标签(并替换为空而不是bb代码,标记 P

3 个答案:

答案 0 :(得分:3)

尝试使用HtmlAgilityPack搜索DOM树并将相关的HTML标记更改为BBCode,而不是使用正则表达式(无法从未解析过HTML)。制作一个新的有效的 BBCode文档似乎是最困难的部分 - 也许有一些库可以帮助在某处制作有效的BBCode标记?

答案 1 :(得分:2)

对于部分 HTML标记,您只需执行简单的string.Replace即可。 BBCode在很多方面只是1:1的标记标记映射,例如<b></b>分别映射到[B][/B]。因此,只需:

即可轻松完成
html.Replace("<b>", "[b]").Replace("</b>", "[/b]")

如果它真的是简单的HTML,并且你不介意对这个逐个标签执行的性能影响和代码丑陋,那就去吧。但要注意跨站点脚本漏洞,如果您打算在某个网页上显示生成的BBCode;这远远不足以进行消毒。

但是,甚至懒得尝试使用正则表达式来清理HTML并自动替换所有标签。例如,<img>标记在HTML与BBCode中看起来完全不同。在HTML中它是<img src="..."/>(尾随斜杠是可选的)而在BBCode中它是[IMG]...[/IMG]。使用正则表达式执行此操作是......好吧,我们只是说次优。

正则表达式是为常规语言设计的,HTML不是常规语言,它是一种无上下文的语言。考虑使用实际的HTML解析器,而不是HTML Agility Pack。然后你可以下载DOM树,将你想要的元素列入白名单,然后将它们映射到BBCode或其他任何你想要的东西。

答案 2 :(得分:0)

我知道你想使用一个用于解析DOM又名HtmlAgilityPack的工具,但是我需要一些可以使用.net中内置工具的东西而不必引用外部dll。

所以我在c#中编写了一个转换器,通过RegEx完成所有操作。

这是我的文章http://www.foliotek.com/devblog/convert-html-to-bbcode-in-c/