【问题标题】:Validating HTML Tags in a String in C#在 C# 中验证字符串中的 HTML 标签
【发布时间】:2011-09-22 18:40:17
【问题描述】:

假设我们有以下 HTML 字符串。

string A = " <table width=325><tr><td width=325>test</td></tr></table>"
string B = " <<table width=325><tr><td width=325>test</td></table>"

我们如何根据 HTML 规范在 C# 中验证 AB

A 应该返回 true 而 B 应该返回 false

【问题讨论】:

  • 您可以解析字符串并将所有 字符相加。如果其中任何一个是奇数,您可以假设它是无效的(对于这种情况)
  • 我认为根据规范,您提供的两个 html 都完全不正确。
  • HTML4 和 HTML5 中有许多 HTML 标记不需要对有效 HTML 使用结束标记:optgroup、option、p、tbody、td、tr、tfoot、thead、th
  • 我将 固定在字符串 A 上。
  • 是的,正如@alex 所说,计数 根本不起作用。

标签: c# .net asp.net


【解决方案1】:

对于这种特定情况,您可以使用HTML Agility Pack 来断言 HTML 格式是否正确或是否有未打开的标签。

var htmlDoc = new HtmlDocument();

htmlDoc.LoadHtml(
    "WAVEFORM</u> YES, <u>NEGATIVE AUSCULTATION OF EPIGASTRUM</u> YES,");

foreach (var error in htmlDoc.ParseErrors)
{
    // Prints: TagNotOpened
    Console.WriteLine(error.Code);
    // Prints: Start tag <u> was not found
    Console.WriteLine(error.Reason); 
}

Checking a HTML string for unopened tags

【讨论】:

  • +1 用于使用现有库而不是尝试自己将其破解。
  • 只是一个警告,虽然上面的例子有效,但这个:“

    example

    ”不会触发任何解析器错误。

  • 这也不会引发任何解析器错误:
  • @AndrewBullock 那是因为它确实是有效的 HTML。
  • @JeremeGuenther 您能否链接到您在偶然发现此问题时创建的 github bug 票证?
【解决方案2】:

首先要检查它是否是有效的 XML。

顺便说一句,我认为您的两个示例都不正确,因为您在两个示例中都省略了 &lt;/tr&gt;

【讨论】:

  • HTML 不是有效的 XML,XHTML 是。
  • @alex,没错,但至少这可能是一个开始,因为所有其他检查都非常困难
  • HTML4 和 HTML5 中有许多 HTML 标记不需要对有效 HTML 使用结束标记:optgroup、option、p、tbody、td、tr、tfoot、thead、th
  • @thekip 只要有一个没有结束标记的 HTML 元素,整个 XML 有效性检查就毫无意义。而且很有可能有一个。
  • XML 比 HTML 严格得多,并且 XMLReader 没有给出正确的结果。
【解决方案3】:

http://web.archive.org/web/20110820163031/http://markbeaton.com/SoftwareInfo.aspx?ID=81a0ecd0-c41c-48da-8a39-f10c8aa3f931

Github 链接:https://github.com/markbeaton/TidyManaged

这个人为 HTMLTidy 编写了一个 .NET 包装器。我没用过,但它可能是你要找的。​​p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 2015-12-25
    相关资源
    最近更新 更多