2009-12-11 93 views
0

我正在使用FreeTextBox编辑器来获取用户创建的一些HTML。 与此问题是这个编辑器不是在“<>”例外的HTML实体中转换特殊字符。我不能使用theHTML = Server.HtmlEncode(theHTML),因为它会转换所有包含标签和参数的HTML,并且我不想创建theHTML.Replace行的不可确定列表。将特殊字符转换为HTML实体,而不更改标记和参数

是否有任何其他功能或方法可用于转换为HTML实体,但只有外部标签?

+0

为了确保我理解你,你希望将保留的HTML字符(&,<,>,',“,...)转换为HTML实体,但不是<,>,标记中的”,“本身是否正确? – David 2009-12-11 22:20:05

+0

只能转换外部标签。 – backslash17 2009-12-11 22:44:45

回答

0

搜索了很多后,我发现我使用了FreeTextBox组件的错误属性。该物业是ConvertHtmlSymbolsToHtmlCodes这必须是真实的。

它还有助于使用FormatHtmlTagsToXhtml如果您需要将您的代码插入到XHTML页面,因为它使用了有关标签参数和周围引号的强大验证。

0

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

1

如果你有一个混合<意思是开始一个标签和<意思是一个文字小于号,你不可能告诉哪个是'标签'忽略,哪个不是。

所有你能做的只是检测<用法是不是一个常规方式形成的开始或结束标记,使用不可靠的讨厌的正则表达式是这样的:

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

,并与&lt;替换它们。同样,对于&&amp;

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

>通常没有进行转义。)

这将不允许建设要素的每一个可能的有效途径,它将使破误嵌套元素,以及不存在的实体,并会混淆非注释等非元素构造。由于正则表达式无法解析HTML,更不用说添加了脆碎碎片的HTML。

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

如果您有一个富文本编辑器组件,可以生成文字为<的输出,那么是时候用不太可怕的东西替换该组件。但总的来说,让用户创建HTML并不是一个好主意,因为他们真的是垃圾。 Plus允许任何人输入HTML,使他们能够完全控制使用JavaScript破坏网站及其安全性。简单的文本标记语言往往是一个胜利。

+0

文字<是精确唯一一个逃脱! – backslash17 2009-12-11 23:13:22

+0

所以你唯一的问题是光标&符号?第二个正则表达式应该解决这个问题。 – bobince 2009-12-11 23:57:58

相关问题