我需要将 html 文本转换为 bbcodes 。我在哪里可以找到我应该怎么做?例如,我转换链接:
regex = new Regex("<a href=\"(.+?)\">(.+?)</a>");
htmlCode = regex.Replace(htmlCode, "[URL]$1[/URL]");
我如何转换bbcodes中的所有html标签(并替换为空而不是bb代码,标记 P
答案 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/