将特殊字符转换为HTML实体,而无需更改标记和参数

我正在使用FreeTextBox编辑器来获取用户创建的一些HTML。 这个问题是这个编辑器没有转换HTML实体中的特殊字符,除了“”。 我不能使用theHTML = Server.HtmlEncode(theHTML) ,因为它转换所有HTML,包括标签和参数,我不想创建一个不可完成的theHTML.Replace列表。 theHTML.Replace行。

是否还有其他function或方法可用于转换为html实体但只能转换为外部标记?

如果你有一个混合的意思是开始一个标签而<意味着一个文字小于号,你就不可能知道哪个'标签'要忽略,哪个不是。

关于你可以做的所有事情就是检测<不是传统形成的开始或结束标记的用法,使用令人讨厌的不可靠的正则表达式,例如:

 <(?!\w+(\s+\w+="[^"<]*")*\s*/?>|/\w+\s*>) 

并用<替换它们 。 同样适用于&

 &(?!\w+;|#\d+;|#x[0-9A-Fa-f]+;) 

>通常不必转义。)

这将不允许构造元素的每种可能的有效方式,并且它将允许破坏的错误嵌套元素和不存在的实体,并且会使诸如注释之类的非元素构造陷入混乱。 因为正则表达式无法解析HTML,更不用说添加了脆弱的碎片的HTML。

所以它几乎不是万无一失的。 如果你想要在不小心打开div时不会破坏页面的正确标记,最好的第一步是将其解析为XHTML,如果它不是格式良好的XML,则拒绝它。

如果你有一个富文本编辑器组件生成输出,其中文字<没有被转义,那么是时候用不那么令人震惊的东西替换那个组件了。 但总的来说,让用户创建HTML并不是一个好主意,因为他们真的很垃圾。 此外,任何人都可以输入HTML,从而可以完全控制使用JavaScript破坏网站及其安全性。 更简单的文本标记语言通常是一种胜利。

我建议使用Linq到Xml解析每个元素并编码每个元素和属性节点的值。 我会尝试提出一些代码,但嘿,这是星期五下午5点!

经过大量搜索后,我发现我使用的是FreeTextBox组件的错误属性。 该属性是ConvertHtmlSymbolsToHtmlCodes必须是真的。

如果您需要将代码插入XHTML页面,也可以使用FormatHtmlTagsToXhtml ,因为它使用带有标签参数和周围引号的强validation。