数据库中的HTML标签 - YAY或NAY?

时间:2009-10-01 09:14:59

标签: c# asp.net sql

我正在使用带有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>

这是正确的做法吗?如果不是那么是因为我需要用文本填充该标签,使得每个段落都有段落和样式。

提前致谢!

5 个答案:

答案 0 :(得分:4)

一般来说,没有。您希望您的数据库字段与它们将要使用的介质无关(因为可能有很多:HTML,纯文本等)

您应该做的是将字段重新格式化为显示的任何上下文。这意味着如果您需要“更丰富”格式的数据,通常使用标记方案(也许markdown),这样您就可以处理它并以您喜欢的任何方式呈现它。

但是,您可以在另一个字段中缓存此格式,以加快检索过程。

答案 1 :(得分:1)

您可以在Label和Literal中使用HTML代码。 Literal 控件比Label更轻量级。它意味着将text / html直接写入浏览器。标签比Literal更笨重,但具有WebControl的所有好处,例如样式选项等。

文字控制:Asp.NET Literal

答案 2 :(得分:1)

谁将这些字符串输入数据库?这种方法的常见问题是:

  • 您需要确保生成的html格式正确
  • 如果人们在数据库中存储的html中包含脚本等,则可能不安全。

因此,在大多数情况下,您只想在数据库中存储真实文本,然后在添加到页面时对其进行格式化并转义所有html字符。

答案 3 :(得分:0)

我个人会避免将HTML存储在数据库中......但是这又取决于上下文。

如果您有一个用于存储来自富文本框的输入的表,那么您将以某种方式存储已应用的任何格式。

正如其他人所提到的那样,一个更安全的替代方法就是创建自己的[bbCode]语法,与此处的文本框(Stack OverFlow)的工作方式非常类似......

  

例如。任何粗体' foo '的文字   变成[b] foo [/ b]

由于您需要解析文本并使用等效的[bbCode]标记替换任何标记,然后在输出到网页时反向执行,但是我个人认为这是一种更安全的方法。数据完整性。

答案 4 :(得分:0)

为什么不将它作为xhtml存储在数据库中 - 您可以在推入之前对其进行验证。使用XML字段类型。这样,如果你需要查询它,你的数据仍然是结构化的。