例如:
如果我有一个像这样的描述(存储在数据库中):
HTML 4已经被调整,扩展和增强,超出了其最初的范围,以为网站带来高水平的互动和多媒体。像Flash,Silverlight和Java这样的插件已经将媒体集成到Web中,但并非没有代价。
我想要格式化最后一行,例如更改字体和颜色。
那么最佳实践是什么?
在我的数据库中嵌入HTML标记?这是安全且最佳的实践吗?还是有一些方法可以将结构层与表现层和行为层分开?
有一种方法可以将数据与展示分离开来。你需要将它们分开!如果你想对从数据库中提出来的文本进行格式化,可以在应用程序代码中进行操作。注意,结构标记和展示标记(字体、颜色、布局等)是完全不同的主题。
http://en.wikipedia.org/wiki/Separation_of_presentation_and_content 讨论了这个问题,并在“预期含义”段落中清晰地区分了结构标记和展示标记。
将格式化标签存储在数据中通常表明两个层次之间的分离不足或数据模型不足以正确表示您的数据。由于作者正在将数据存储在数据库中,这可能表明他只有一个字段来保存文章的“内容块”,而不是多个字段来保存作者、标题、正文、参考文献等。对于用户输入数据,我们经常使用标记语言来指定结构。这通过“虚假”HTML标签或甚至真正的HTML/XML标签(如<h1>
、<em>
、<a>
等)来实现。
结构化
标记不是呈现。 - gfortune<h1>
和<h1 style='font.....'>
或<font>
之间的区别。 - gfortune这取决于数据从哪里进入数据库。
如果只有您更改数据库内容,则将HTML标签存储其中是完全正常的。
否则,如果您将用户输入存储在数据库中,则有两种方法:
1)对用户提供的输入进行清理(无论是在存储还是在显示时),以确保不会显示任何恶意数据。
2)使用一些中间标记语言(例如BBCode)进行编译为HTML(同样是在存储或显示时)。
您可以使用Blob字段,但是如果我没记错的话,您将无法对其进行完全搜索。如果您有一个以模板名称为值的列和一个包含HTML模板值的Blob,则这将非常有效。
在我的看法中,将HTML存储在数据库中是完全可以的。你听起来很聪明,不会允许未经验证的内容进入数据库。
但你需要小心更新方式。如果你通过代码向数据库插入数据:
INSERT INTO myTable Values(x + y + z)
如果变量x中包含一些带有单引号的HTML,那就不好了。
我认为你在数据库中存储的字符串内容与展示层无关,其唯一影响是你的业务层如何向展示层提供html字符串(直接从数据库中读取或稍后进行装饰)。