C# 数据库中的HTML标记是坏习惯还是好习惯?

C# 数据库中的HTML标记是坏习惯还是好习惯?,c#,asp.net,html,css,database,C#,Asp.net,Html,Css,Database,有时我需要格式化来自数据库的特定数据或部分数据 例如: 如果我有这样一个desc(存储在DB中): HTML4经过调整、扩展和扩充,超出了最初的范围,为网站带来了高水平的交互性和多媒体。Flash、Silverlight和Java等插件为Web增加了媒体集成,但并非没有成本 我想格式化最后一行,比如改变字体和颜色 这样做的最佳实践是什么 在我的数据库中嵌入HTML标记??这是安全的最佳做法还是有办法将结构层、表示层和行为层分开 这取决于数据进入数据库的位置 如果您是唯一一个更改DB内容的人,

有时我需要格式化来自数据库的特定数据或部分数据

例如:

如果我有这样一个desc(存储在DB中):


HTML4经过调整、扩展和扩充,超出了最初的范围,为网站带来了高水平的交互性和多媒体。Flash、Silverlight和Java等插件为Web增加了媒体集成,但并非没有成本


我想格式化最后一行,比如改变字体和颜色

这样做的最佳实践是什么


在我的数据库中嵌入
HTML
标记??这是安全的最佳做法还是有办法将结构层、表示层和行为层分开

这取决于数据进入数据库的位置

如果您是唯一一个更改DB内容的人,那么在其中存储HTML标记是完全正常的

否则,如果将用户输入存储在DB中,则有两种方法:

1) 对用户提供的输入进行清理(存储或显示),以确保不会显示恶意数据


2) 若要使用一些可能性有限的中间标记语言(如BBCode),并将其编译为HTML(同样,在存储或显示时)。

您可以使用blob字段,但您将无法对其进行完全搜索iirc。如果您有一个以模板名称为值的列和一个以html模板值为值的blob,那么这将很好地解决问题。

有一些方法可以将数据与演示文稿分开。你把他们分开!如果您想对从数据库中提取的文本进行格式化,请在应用程序代码中进行格式化。请注意,结构化标记与表示标记(字体、颜色、布局等)是完全不同的主题

讨论了这一点,并在“预期含义”下的段落中明确区分了表示标记和结构标记

在数据中存储格式标记通常会导致两个层之间的分离不良,或者数据模型不足以正确表示数据。当作者将数据存储在数据库中时,这可能表明他只有一个字段用于保存文章的“内容块”,而不是多个字段用于保存作者、标题、正文、引用等。对于用户输入数据,我们通常使用用户内容内的标记来指定结构。这是通过“假”html标记实现的,甚至是真正的html/xml标记,如
,等等


请注意,原则上我并不反对结构化标记,但我会仔细研究,如果将其存储在数据库中,为什么需要它。原则上,我反对演示文稿标记。

在我看来,在数据库中存储HTML是完全正确的。你听起来很聪明,不允许任何东西未经验证就进入数据库

你只需要注意它是如何更新的。如果要通过代码插入数据库:

插入myTable值(x+y+z)


如果变量x中有一些带有单引号的HTML,例如,no bueno。

如果您计划对存储的数据进行操作或搜索,则不要在数据库中存储HTML标记。想象一下,在某个时刻,你被要求将字体从塔荷马改为佐治亚,将标签改为
,或者允许用户在HTML列上搜索;搜索strong会返回不相关的信息,因为strong也是一个常用的HTML标记

如果不检查存储的内容,在数据库中存储HTML标记也是一个坏主意。恶意脚本标记,如
location=http://otherwebsite“
只是一个简单的例子


理想情况下,您应该按原样存储数据,或者使用某种标记(如wiki或markdown)来存储基本格式信息。

我不建议在数据库中存储任何html标记。最后,如果你的代码库变大了,如果你想改变你的html,你会发现自己迷失了方向。例如,向html标记添加一些参数,如类或类似的。您需要用sql语句“修复”所有html标记。这也适用于您希望对数据执行其他操作的情况。例如,创建RSS提要或将其导出为其他格式,例如excel工作表或类似格式

你到底为什么要这么做?我相信tere是解决你问题的更好办法。
尝试将内容与应用程序层分离。规范化您的数据,并将段落例如放入新的数据集中。例如,如果你真的需要给一个单词涂颜色,我会按照已经发布的建议来做。使用一些自己的语法,如[color-a][/color-a]。但是,导出问题可以通过striptags()解决。

我认为存储在数据库中的字符串的内容与表示层无关,它唯一的影响是您的业务层如何将html字符串(直接从数据库读取或稍后修饰)提供给表示层

作为旁注-我必须说,将其存储在数据库中更难维护。我是否应该因为没有将
数据
与此评论中的
演示文稿
分离而受到惩罚?可爱。只是为了不让别人读到这篇文章,以为你是认真的。。。作者的问题与此评论之间的主要区别在于,作者拥有必要的控制权,可以将数据与演示分离。可能需要稍微重新构造数据模型,以使数据类型更易于区分(表示结构的标记很常见,因为根据目的将数据拆分为多个字段),而您无法在注释中这样做。尽管如此,请注意
structural