1

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

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

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

4

3 回答 3

3

与其使用正则表达式(它永远无法解析 HTML),不如尝试使用HtmlAgilityPack向下搜索 DOM 树并将相关的 HTML 标记更改为 BBCode。制作一个新的有效BBCode 文档似乎是其中最难的部分——也许有一些库可以帮助在某处制作有效的 BBCode 标记?

于 2010-04-25T16:43:24.423 回答
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 或任何你喜欢的东西。

于 2010-04-25T16:45:08.120 回答
0

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

所以我用 c# 编写了一个转换器,它通过 RegEx 完成所有工作。

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

于 2011-04-18T14:26:46.663 回答