簡體   English   中英

數據庫內的HTML標記-是還是否?

[英]HTML tags inside the Database - YAY or NAY?

我在C#和SQL Server 2005中使用ASP.NET。我在表單上有一個簡單的ASP.NET標簽。

<asp:Label ID="lblBodyCopy1" runat="server"></asp:Label>

在頁面加載時,我用保存在數據庫中的文本填充此標簽。

<p class="r_box_A">text text</p><p class="r_box_B">text text text</p>

這是正確的做法嗎? 如果不是,那是因為我需要用文本填充該標簽,這樣每個段落都會有段落和樣式。

提前致謝!

通常,不會。 您希望您的數據庫字段與使用它們的媒體無關(因為可能有很多:HTML,純文本等)

您應該做的是將字段重新格式化為顯示的任何上下文。 這意味着,如果您需要“更豐富”的格式的數據,則通常使用標記方案(也許是markdown ),以便可以處理它並以任意方式呈現它。

但是,您可以將此格式緩存在另一個字段中,以加快檢索過程。

您可以在Label和Literal中包含HTML代碼。 文字控件比標簽輕得多。它的意思是直接向瀏覽器寫出text / html。 Label的大小比Literal稍大,但是具有WebControl的所有優點,例如樣式選項等。

文字控制: Asp.NET文字

誰將這些字符串輸入數據庫? 這種方法的常見問題是:

  • 您需要確保生成的html格式正確
  • 如果人們在存儲在數據庫中的html中包含腳本等,這可能是不安全的。

因此,在大多數情況下,您只想在數據庫中存儲真實文本,然后將其格式化並在添加到頁面時轉義所有html字符。

我個人將避免將HTML存儲在數據庫中……但是,這又取決於上下文。

如果您有一個用於存儲來自富文本框的輸入的表,則您將需要以某種方式存儲已應用的所有格式。

正如其他人所提到的,也許更安全的選擇是創建自己的[bbCode]語法,這與此處的文本框(堆棧溢出)的工作方式非常相似...

例如。 粗體“ foo ”的任何文本均變為[b] foo [/ b]

由於需要解析文本並用等效的[bbCode]標簽替換所有標簽,然后在輸出到網頁時進行相反的操作,因此需要進行額外的工作,但是我個人認為這是一種在數據完整性方面更安全的方法。

為什么不將其存儲為xhtml到數據庫中-您可以在將其壓入之前對其進行驗證。使用XML字段類型。 這樣,如果您需要對其進行查詢,則數據仍然是結構化的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM