2009-05-01 44 views
2

我目前正在为一个网站的管理部分工作。管理员可以使用infragistics WebHtmlEditor工具为页面创建标记,然后在加载时将页面加载到页面中。存储通过网络富文本编辑器输入的HTML标记?

将此标记存储在数据库中的最佳方式是什么?我们是否应该将WebHtmlEditor生成的HTML保存到varchar字段中?这是否有任何问题,例如任何标记会丢失或导致数据库问题?

谢谢

回答

2

只需将其直接保存到数据库中,并注意类型和长度。你可能会发现它应该是一个nvarchar(max)列。假设你没有在收集控制值和传递给数据库之间进行转换,那么不应该丢失任何标记。

+0

我很高兴你说nvarchar(max)而不是ntext。 – DForck42 2009-05-02 19:18:54

1

我不认为有任何关于HTML和SQL的问题。在插入/选择之前,请记住要逃脱并避开它。

0

数据库将存储它给出的原始数据。从这一点开始,不需要做任何事情,只需将HTML和存储在该varchar字段中的所有内容输出到HTML页面上即可正常工作。

记得调用mysql_real_escape_string(); (或您的语言相同)放入WebHtmlEditor的输出后值,然后将其放入数据库中,以确保它不会在SQL查询中抛出任何错误。

+0

好,它实际上是标记为SQLSERVER。 – 2009-05-01 13:21:22

3

SQL不是问题,但如果管理员被允许从Word粘贴,那么您需要在存储之前清理标记。我不知道WebHtmlEditor,但你可以轻松地测试:如果从Word中粘贴产生像

style="mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; 
    mso-fareast-language: EN-US; mso-bidi-language: AR-SA; 
    mso-bidi-font-family: 'Times New Roman'; mso-highlight: yellow" 

<p class="MsoNormal"> .. </p><o.p></o.p> 

或提供了很多附加<span><div>标签的东西,那么你会希望在存储之前清理标记。也许你可以使用一些在线演示来测试,然后点击编辑器中的一些View HTML按钮,但是你不知道编辑器在保存时是否可以清理。

请注意,浏览器对Word粘贴的反应不同,所以如果你依靠WebHtmlEditor来清理东西,那么你可能需要使用一些不同的浏览器进行测试。

一些富文本编辑器提供了一个特殊的按钮“从Word粘贴”,但这可能会有效地作为“粘贴为纯文本”,之后管理员可能会停止使用它......(当然,您的管理员可能会忘记使用它,因此即使存在此按钮也需要清理。)

1

这取决于您要存储的HTML大小和字符编码。

由于此文章被标记为SQL Server,因此当前的VARCHAR(MAX)为8000个字符。

如果它不再可以使用TEXT类型。

有一些关于TEXT字段的cavaets,因为它们限制了使用LIKE查询的能力,UNION,Replication和其他问题。

如果您需要先进charactersets你也可以考虑unicode的类型NVARCHAR和NTEXT但这些占用两倍存储为VARCHAR和TEXT因为他们使用2个字节每个字符而不是1

如果上述任何内容是由用户输入的,您应该非常小心XSS注入攻击,一旦您开始允许用户使用HTML,就几乎不可能停止。

VARCHAR:http://msdn.microsoft.com/en-us/library/aa258242(SQL.80).aspx TEXT:http://msdn.microsoft.com/en-us/library/aa260619(SQL.80).aspx

XSS攻击:http://en.wikipedia.org/wiki/Cross-site_scripting