从代码中删除一些bbcodes

时间:2015-03-26 19:43:32

标签: c# html .net bbcode

我遇到了问题。我正在使用HTML的bbcode解析器,当我尝试解析它时,当我的标签不在我的解析器集中时,我遇到了一些问题。

例如: 我的解析器仅允许[b][center][i]标记。 如果我尝试解析[u][color={anyColor}]标记,则会返回异常。

我想删除任何其他不被授权的标记。

首先我想过不允许在我的textarea上,但是,当我使用 ctrl + c / v 来填充textarea时填充这些标签,当数据已经存在于我的数据库中时我会注意到它。

我的想法:

  1. 用户输入错误标签的字符串
  2. 我调用任何方法删除不允许的标签(这是我的问题)
  3. 将数据保存在我的数据库中
  4. 任何人都可以帮助我吗?或者建议我别的什么?

1 个答案:

答案 0 :(得分:1)

在快速浏览一下您提供的链接上找到的解析器src后,似乎如果它遇到了一个它不知道的标签(意味着没有在实例化过程中提供的标签列表中),它就会出错(在某种方式)。

目前看起来你有几个选择:

  1. 将您的ErrorMode更改为ErrorFree
    • 这将不再产生任何例外情况,而是将Unknown tags视为文字。
  2. 使用您原来的想法并限制前端的输入。
  3. 如果可以,不是直接使用HTML,而是将所有可能的标记添加到解析器中,检查是否可以从解析器中获取ac#object,并在输出到html之前消除不需要的标记。< / p>

  4. 或者在生成html之后的事情下降时禁止使用生成的HTML标记。

  5. 向解析器的作者发送电子邮件/(如果您知道德语)在codeplex上的票证/问题,并要求他们添加对条带化不需要的标签的支持。

  6. 或者如果你想要,因为你有src添加功能来剥离不需要的标签,你自己

    • 我认为这应该不会太难,请遵循Tags中当前BBCodeParser.cs列表的模式并制作TagsToIgnore列表,然后在其他列表之前添加一个检查解析标记只是为了剥离/继续下一个标记。
  7. 修改 您可以使解析器解释标记以便不显示任何内容。你在哪里初始化bbCodeParser。

     var parser = new BBCodeParser(new[]
                {
                    // keep these tags 
                    new BBTag("b", "<b>", "</b>"), 
                    new BBTag("i", "<span style=\"font-style:italic;\">", "</span>"), 
                    new BBTag("u", "<span style=\"text-decoration:underline;\">", "</span>"),
                    // remove these (or at least there markup) 
                    new BBTag("code", "", ""), 
                    new BBTag("img", "", ""), 
    
                });