数据库中的HTML标记是坏做法还是好做法

本文关键字:HTML 数据库 | 更新日期: 2023-09-27 18:25:28

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

例如:

如果我有一个desc(存储在DB中),如下所示:


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


我想格式化最后一行,例如更改字体和颜色。

做这件事的最佳做法是什么?

在我的数据库中嵌入HTML标签??这是安全和最佳实践吗?还是有某种方法可以将结构层、表示层和行为层分开?

数据库中的HTML标记是坏做法还是好做法

如果您计划对存储的数据进行操作或搜索,则不要在数据库中存储HTML标记。想象一下,在某个时刻,你被要求将字体从Tahoma更改为Georgia,将<b>标记更改为<strong>,或者允许用户在HTML列上搜索;并且搜索strong最终返回不相关的信息,因为strong也是一个经常使用的HTML标签。

如果不检查存储的内容,那么在数据库中存储HTML标记也是一个坏主意。像<script>location = 'http://otherwebsite'</script>这样的恶意脚本标记只是一个天真的例子。

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

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

http://en.wikipedia.org/wiki/Separation_of_presentation_and_content谈到了这一点,并在预期含义下的段落中明确区分了表示标记和结构标记。

在数据中存储格式化标记通常会导致两层之间的分离较差,或者数据模型不足以正确表示数据。由于作者将数据存储在数据库中,这可能表明他只有一个字段来保存文章的"内容块",而不是作者、标题、正文、引用等的多个字段。对于用户输入数据,我们通常会回到用户内容中的标记来指定结构。这种情况发生在"假"html标签,甚至是真正的html/xml标签,如<h1><em><a>等。

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

它取决于数据进入数据库的位置。

如果你是唯一一个更改数据库内容的人,那么在其中存储HTML标签是完全正常的

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

1) 清除用户提供的输入(在商店或显示器上),以确保不会显示恶意数据。

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

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

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

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

IMO将HTML存储在数据库中是非常好的。你听起来足够聪明,不允许任何东西在没有验证的情况下进入数据库。

你只需要小心它的更新方式。如果您通过代码插入数据库:

INSERT INTO myTable值(x+y+z)

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

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