检测不正确的HTML标记的存在并纠正它

时间:2014-01-08 09:05:08

标签: c# html regex

我在C#中有一个程序从数据库中获取一些数据。数据可以包含html个标记。不幸的是,在某些情况下,最后关闭的html标记缺少“>”性格。

任何人都可以帮我找到一个解决方案来检查这个不正确的html实例,然后添加尾随的“>”字符。

谢谢。

--- --- EDIT

我正在考虑以这种方式解决问题:

  1. 检查</tag
  2. 的最后一次出现
  3. 检查其后面的字符是否为&gt;
  4. 如果没有,请添加&gt;
  5. 但是,我不知道我应该在1)使用什么正则表达式。有没有人有想法。我不是很擅长正则表达式。

    --- --- EDIT 这些是我可以拥有的数据的一些例子:

    hello <span class=green>Sean</span> Moore
    
    hello <span><span class="green">Roger</span></span
    

2 个答案:

答案 0 :(得分:1)

假设您从数据库中获取HTML作为字符串,在这种情况下,字符串上的EndsWith方法将完成工作

if(!html.EndsWith(">"))
{
    html += ">";
}

这是一种快速而肮脏的方法,因此随着代码的增长,您可能会想要摆脱快速黑客攻击。在这方面,您可能想要开始研究HtmlAgilityPack

之类的内容

答案 1 :(得分:0)

1)如果数据包含html标签:

if(Data.StartsWith("<") && !Data.EndsWith(">"))
    Data += ">";

检查您的数据是否为html(以<开头)并且不正确(不以>结尾),如果是,则添加>

2)如果html标签外可以有文字:

if (Data.Contains("</") && Data.LastIndexOf(">") < Data.LastIndexOf("</"))
{
    int LastTagPosition = Data.LastIndexOf("</");
    int LastTagEndPosition = Data.IndexOf(" ", LastTagPosition);
    if (LastTagEndPostion < 0)
        Data += ">";
    else
        Data.Insert(LastTagEndPosition, ">");
}

检查是否有关闭的html标签以及最后>后是否有</。如果没有,那么如果没有空格,它会在下一个空格或数据末尾添加>