2010-02-09 49 views
1

我有一个输入,用户可以键入html或纯文本。例如,当用户复制&粘贴MS Word中的文本时,它会生成一个奇怪的html。然后,当您查看该主题时,可以看到整个页面的样式受到影响。我真的不知道生成的html是否有未封闭的标签或其他东西,但看起来像是这样,因此页面的样式会受到影响。影响整个网站的文字风格

有没有人知道如何从整个页面的样式中“隔离”div的html(或任何容器)?

+2

您不应该真的允许任意的HTML,因为它会为您打开XSS洞。也许考虑降价? – 2010-02-09 17:28:59

回答

3

在IFRAME中显示内容的缺点,你不能这样做。我通常在这种情况下做的是将标签剥离逻辑应用到内容中。从安全角度来看,您实际上不想允许任意的HTML,但即使您不关心用户输入的内容,也应该剥离出无效的HTML标签(Word有习惯用类似o:p的奇怪名称空间创建标签)并在结果上运行Tidy之类的东西,以确保每个标签都能正确关闭。那里有许多用于.NET的Tidy库; here's one

Here's a quick cut-and-paste我过去是如何做到这一点的。请注意,该类实现了我使用它的项目中的一个接口,但是您得到了一般想法。

+0

如何将其包含在我的项目中?我试图包括该项目的DLL,但我得到一个异常说,没有找到源。我是否必须包含整个源代码? – 2010-02-09 18:14:59

+0

您需要将TinyATL DLL链接到您调用它的任何项目。 – Tom 2010-02-09 19:05:18

0

从单词复制文本可以包括<style>标签。隔离这些样式的唯一可靠方法是将输入控件置于

0

您可以清理输入或将其显示在IFrame中。

0

这是我,我会除了基本格式(例如,粗体,斜体),并使用Tidy。这就是我最终做的事情,我将所有CSS样式的字体去掉并转换为<strong>,<em>等。