【问题标题】:Detect the Presence of Incorrect HTML tag and Correct It检测不正确的 HTML 标签的存在并纠正它
【发布时间】:2014-01-10 19:21:54
【问题描述】:

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

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

谢谢。

---编辑---

我正在考虑这样解决问题:

  1. 检查</tag 的最后一次出现
  2. 检查后面的字符是否是>
  3. 如果没有,添加 >

但是,我不知道应该在 1) 处使用什么正则表达式。有没有人有想法。我不太擅长正则表达式。

---编辑--- 这些是我可以拥有的一些数据示例:

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

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

【问题讨论】:

  • 您是否只在最后一个标签上缺少&gt;,或者在html文本中间(在其他标签上)?
  • 它总是在最后一个标签上。但是,并非所有数据都会发生这种情况。
  • 换句话说,某些数据将具有正确格式的 HTML 标记。其他数据将有一个格式不正确的 HTML 标记。在这种情况下,它始终是最后一个标签。
  • 所以最后一个标签没有关闭 &gt; 总是看起来像 &lt;/tagname ?

标签: c# html regex


【解决方案1】:

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

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

这是一种快速而肮脏的方法,因此随着代码的增长,您可能希望摆脱快速破解。在这方面,您可能想开始看一下 HtmlAgilityPack

之类的东西

【讨论】:

    【解决方案2】:

    1) 如果数据有一个包含的html标签:

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

    这会检查您的数据是否为 ​​html(以 &lt; 开头)并且不正确(不以 &gt; 结尾),如果是,则添加 &gt;

    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 标记以及最后一个 &lt;/ 之后是否有 &gt;。如果没有,则在下一个空格或数据末尾(如果没有空格)添加&gt;

    【讨论】:

    • 你好肖恩摩尔
    • 但是,我可以有这样的数据:你好 Roger
    • @user3172468 你的问题并不清楚。请提供您可以拥有的不同 html 的示例。还请展示您尝试过的内容
    • 是的,当 html 标签外有文本时,这是行不通的。即将更新。
    • 非常感谢 Raidri :)
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2023-03-17
    • 2013-08-19
    • 2013-10-06
    • 2014-11-29
    • 2022-09-27
    • 2015-11-22
    相关资源
    最近更新 更多