将特殊字符转换为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。
- 如果语句在转发器中使用ItemTemplate
- 强制回发
- 大多数人使用.NET的SqlMembershipProvider,SqlRoleProvider和SqlProfileProvider吗?
- asp.net c#在从服务器端代码更改索引时阻止触发selectedindexchanged事件
- Response.Redirect之后的Javascript alert()
- 带有UpdatePanel回发的ajax“加载”图标
- 如何在ASP.net页面中设置面包屑
- 为什么Asp.Net Identity IdentityDbContext是黑盒子?
- 如何使用基于单元格值的颜色设置Asp.net GridView单元格样式