2009-05-01 50 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