0

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

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

4

3 回答 3

1

如果你有混合<含义开始一个标签和<一个字面小于号的含义,你可能无法分辨哪个是要忽略的“标签”,哪个不是。

你所能做的就是检测<不是传统形式的开始或结束标签的用法,使用讨厌的不可靠的正则表达式,例如:

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

并将它们替换为&lt;. 同样对于&with &amp;

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

>通常不必转义。)

这不会允许所有可能的有效构建元素的方式,它会允许破坏错误嵌套的元素和不存在的实体,并且会弄乱像注释这样的非元素构造。因为正则表达式无法解析 HTML,更不用说添加了脆碎位的 HTML。

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

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

于 2009-12-11T23:07:45.197 回答
0

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

于 2009-12-11T22:55:52.803 回答
0

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

如果您需要将代码插入 XHTML 页面,使用FormatHtmlTagsToXhtml也很有帮助,因为它使用带有标签参数和引号的强验证。

于 2009-12-23T16:44:10.677 回答