C# 是否可以修复已取消扫描的html<;及>;角色?

C# 是否可以修复已取消扫描的html<;及>;角色?,c#,html,C#,Html,例如,如果我有以下html: <div>this is a test < text</div> 这是一个测试”,“{{{$1}}”); 2) 将 3) 将{{{替换为,这实际上不是一个错误。HTML允许有一个未编码的字符的规则呢?如何在html中不允许转义?但不允许XHTML将其转义。@Karim在html中的任何地方都不必转义。这是不可能的,因为此html不会被视为有效的xml。即使使用诸如Htmlagibility pack之类的工具,它也是无效的,因为它会

例如,如果我有以下html:

<div>this is a test < text</div>
这是一个测试
测试后的<是一个错误,应该使用正确的html

<div>this is a test &lt; text</div>
这是一个测试文本
但是我有很多html文件由于错误没有被编码,我需要修复这个错误,以便以后可以解析它们。原始数据源不可用,因此唯一的选择是修复我的html

嗯,相同的规则适用于>字符和同时包含<和>字符(如“-”的文本)。我想听听能帮助我的算法或库的想法。谢谢

注意:上面的html示例是一个示例,应该在大型html文件上完成此工作。

我建议:

识别并映射所有已知标记的位置,如
。 在步骤1中构建的映射之外的任何地方替换

使用类似for.NET的“轻松”HTML解析器将非常适合。获取库解释的树,然后在每个节点值中,替换相应的<和>


请参见此处的示例:

执行此操作的慢方法是将每个HTML文件视为XML文件。然后解析该XML文件的每个节点,并对该节点的内容执行Server.HTMLEnocde。因为HTML只是一组定义好的XML,所以应该可以使用。

1)对于所有已知的HTML标记,替换为其他一些字符,如{{{{和}}}。您可以像这样或多或少地使用正则表达式:

Regex.Replace(source,"</?((b|a|i|table|td|all|other|known|html|tags)( [^>]*))>","{{{$1}}}");
Regex.Replace(source,“]*)>”,“{{{$1}}”);
2) 将<替换为<,将>替换为>


3) 将{{{替换为<,将}}替换为>

,这实际上不是一个错误。HTML允许有一个未编码的<字符,如果后面跟一个空格。这实际上是一个很好的事实,我不知道:)那么>字符的规则呢?如何在html中不允许转义?但不允许XHTML将其转义。@Karim
在html中的任何地方都不必转义。这是不可能的,因为此html不会被视为有效的xml。即使使用诸如Htmlagibility pack之类的工具,它也是无效的,因为它会将此未转义的<视为标记。我认为这是不可能的,因为在每个节点中替换<和>,实际上会替换子节点,最终我将拥有一个带有大量转义子节点的实体,这不会发生,因为树是基于可识别的标记构建的,并且实际的标记不会使用节点值进行修改。但请随意使用更繁琐、更容易出错的方法:)