我目前正在为网站制作管理部分。管理员可以使用infragistics WebHtmlEditor工具为页面创建标记,然后将其加载到页面中。
将此标记存储在数据库中的最佳方法是什么?我们应该将WebHtmlEditor生成的HTML保存到varchar字段吗?这有什么问题,例如是否会丢失任何标记或导致数据库出现问题?
由于
答案 0 :(得分: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 :(得分:2)
只需将其直接保存到您的数据库中,并注意其类型和长度。您可能会发现它应该是nvarchar(max)列。假设您在从控件中收集值并传递给DB之间没有进行任何转换,则不应丢失标记。
答案 2 :(得分:1)
我认为HTML和SQL没有任何问题。只需记住在插入/选择之前逃脱并取消它。
答案 3 :(得分:1)
这取决于您存储的HTML的大小和字符编码。
由于此帖子标记为SQL Server,因此当前VARCHAR(MAX)为8000个字符。
如果它不止于此,您可以使用TEXT类型。
有TEXT字段的cavaets,因为它们限制了使用LIKE查询的能力,UNION,Replication等问题。
如果你需要高级字符集,你也可以考虑unicode类型NVARCHAR和NTEXT,但是它们占用的存储空间是VARCHAR和TEXT的两倍,因为它们每个字符使用2个字节而不是1个字节。
如果用户输入了这些内容,您应该非常小心XSS注入攻击,一旦您开始允许用户使用HTML,这几乎是不可能停止的。
VARCHAR:http://msdn.microsoft.com/en-us/library/aa258242(SQL.80).aspx 撰文:http://msdn.microsoft.com/en-us/library/aa260619(SQL.80).aspx
答案 4 :(得分:0)
数据库将存储给定的原始数据。从那时起就没有必要对它做任何事情,你可以将HTML和存储在该varchar字段中的所有内容输出到HTML页面上,它将正常工作。
记得调用mysql_real_escape_string(); (或者等同于您的语言)在将WebHtmlEditor的输出放入数据库之前的值上,以确保它不会在SQL查询中引发任何错误。