有时我需要格式化来自数据库的特定数据或部分数据。
例如:
如果我有这样的desc(存储在DB中):
HTML 4已经过调整,扩展和扩展,超出了其初始范围,为网站带来了高水平的交互性和多媒体。像Flash,Silverlight和Java这样的插件已经为Web添加了媒体集成,但不是没有成本。
我想格式化最后一行,例如更改字体和颜色。
这样做的最佳做法是什么?
在我的数据库中嵌入HTML
标签?这是安全的,最好的做法还是有一些方法可以将结构层与表示层与行为层分开?
答案 0 :(得分:6)
如果您计划操作或搜索存储的数据,则不要在数据库中存储HTML标记。想象一下,在某些时候,您被要求将字体从Tahoma更改为Georgia,将<b>
标记更改为<strong>
或允许用户搜索HTML列;并搜索 strong 最终返回无关信息,因为strong也是经常使用的HTML标记。
如果不检查存储的内容,在数据库中存储HTML标记也是一个坏主意。诸如<script>location = 'http://otherwebsite'</script>
之类的恶意脚本标记只是一个简单的例子。
理想情况下,您应该按原样存储数据或使用某种标记(例如(wiki或markdown))来存储基本格式信息。
答案 1 :(得分:5)
有一些方法可以将数据与演示文稿分开。你把它们分开!如果要对从数据库中提取的文本进行一些格式化,请继续在应用程序代码中执行此操作。请注意,结构化标记与表示标记(字体,颜色,布局等)完全不同
http://en.wikipedia.org/wiki/Separation_of_presentation_and_content讨论了这一点,并在意图含义下的段落中明确区分了表示标记和结构标记。
在数据中存储格式标记通常表示两个图层之间的分离较差或数据模型不足以正确表示您的数据。由于作者将数据存储在数据库中,这可能表明他只有一个字段用于保存文章的“内容块”而不是作者,标题,正文,引用等的多个字段。对于用户输入数据,我们经常回到用户内容中的标记来指定结构。这通过“假”html标签或甚至真实的html / xml标签发生,例如<h1>
,<em>
,<a>
等。
请注意,我原则上并不反对结构标记,但如果您将其存储在数据库中,我会仔细查看为什么需要它。我原则上反对演示标记。
答案 2 :(得分:2)
这取决于数据进入数据库的位置。
如果您是唯一更改数据库内容的人,那么将HTML标记存储在其中是完全正常的。
否则,如果您将用户输入存储在DB中,则有两种方法:
1)清理用户提供的输入(在商店或显示器上)以确保不会显示恶意数据。
2)使用一些具有有限可能性的中间标记语言(例如BBCode),并将其编译为HTML(再次,在商店或显示器上)。
答案 3 :(得分:2)
我不建议在数据库中存储任何html标签。最后,如果你的代码库变大,你会发现自己迷失了,如果你想改变你的html,你也会发现自己迷失了。例如,为你的html标签添加一些参数,如类或类似。您需要使用sql语句“修复”所有html标记。这也适用于您希望对数据执行其他操作的情况。例如,创建RSS源或将其导出为其他格式,例如excel表或类似格式。
你为什么要这样做呢?我相信tere是解决问题的更好方法。 尝试将内容从应用程序层中分离出来。 Normelize您的数据并将段落放在新的数据集中。如果你真的需要为一个单词着色,我会按照已发布的建议。使用一些自己的语法,如[color-a] [/ color-a]。然而,出口问题可以通过striptags()
解决答案 4 :(得分:1)
您可以使用blob字段,但是您无法对其进行全面搜索。如果你有一个模板名称作为值的列和一个带有html模板值的blob,那么这样就可以了。
答案 5 :(得分:1)
IMO将HTML存储在您的数据库中是完美的。你听起来很聪明,不允许任何东西进入数据库而不进行验证。
您只需要注意它的更新方式。如果您通过代码插入数据库:
INSERT INTO myTable Values(x + y + z)
如果变量x中有一些带有单引号的HTML,例如,没有bueno。
答案 6 :(得分:1)
我认为您存储在数据库中的字符串的内容与表示层无关,它唯一的影响是您的业务层如何提供html字符串(直接从数据库读取或稍后将其装饰)到表示层。