将HTML放入数据库字段是不对的?

时间:2012-05-13 23:05:14

标签: mysql database database-design

将html放入数据库是不对的?

例如paypal按钮......

或阻止文本中有几个换行符?

5 个答案:

答案 0 :(得分:1)

问题不是把它放在桌子上的列上,而是这样的事情如何使你的应用程序更新,数据检索等等。你需要做出判断,但肯定不是罕见。

答案 1 :(得分:1)

我认为一般情况下应尽可能避免这种情况。传统上,网站上的HTML标记要么是静态的,要么是模板的一部分;在这种情况下,它不属于数据库。此规则当然有例外:例如,某些内容管理系统允许内容管理员使用基本HTML标记。我非常确定Stack Overflow的可编辑内容中的HTML标记会被写入数据库。

这样的规则更重要的是不将HTML放入数据库确保您的整体架构健全;并且您允许Web服务器和数据库等不同组件实现它们的设计功能。

答案 2 :(得分:0)

只要您意识到您放置的HTML应严格用于显示目的,只是在字段中存储您希望以特定方式显示的某些文本,并在其中添加一些标记,这并非真正错误那个目的或者如果你认为在客户端以相同的方式操作文本很难,但是不要将html存储在你认为可能用于搜索或作为参考的字段中。

答案 3 :(得分:0)

没错(你可能想要索引该列)但允许普通用户完全提名内容是非常错误的;你不希望普通用户插入任意的javascript内容!如果用户必须首先证明他们是高权限的(例如,网站所有者),或者您是从渲染器生成HTML(例如,Markdown)并存储渲染结果,那就没关系。

小心不要将HTML文档与HTML片段或纯文本混淆;他们是不同的,你应该随时知道你在做什么......

答案 4 :(得分:0)

我完全不同意那些说“错”的人!但是,Dave Newton在下面的评论中提供了一个使用XML标记而不是HTML标记的好例子。

我有一个充满词汇条目的数据库:语言A中有一个头字字段,语言B中有一个“定义/解释”字段,比方说英语。

在编写定义/说明字段时,我可能想要突出显示某些单词并给它们像这样的SPAN:<SPAN lang='fr'>yeux</SPAN> *,而其他单词可能是这样的:<SPAN lang='en'>eyes</SPAN>。这些跨度之外的文本显然是解释性文本,类似这样(对于法语“oeil”):

<EN>eye</EN> <phonetics>...</phonetics>, irregular pl. <FR>yeux</FR> <phonetics>...</phonetics>, <EN>eyes</EN>. And some more miscellaneous free-form text perhaps with some other embedded <FR> or <EN> words...

<STRONG><EM>之类的简单标签的理由可能经常发生:通常任何类型的元标签都可能表达某些元语义,用户/编辑可能认为这些元语义非常重要或是必不可少的。

当试图让MySQL执行您通常希望在简单文本字段上执行的操作时,会遇到一个大问题。关于这一点有两点要说:

- 首先,您可能希望将“纯文本”字段与标记的字段并行显示...

- 其次,为了在标记字段之间进行比较,存在一些问题:您可能需要在任何INSERT INTOUPDATE之前“标准化”您的标记:目标本质上是为了使任何在HTML上下文中显示相同的字段具有完全相同的标记...根据我的经验,实现这一点远非微不足道,但并非不可能。 HTML Tidy可能有助于解决其中的一些问题,但我认为它不一定会做出“正常化”所需的一切。

*顺便提一下,这种标记可能不是纯粹的“装饰”目的:假设您使用Lucene / Elasticsearch类型的倒排索引索引所有这些“定义/解释”字段:通过标记所有嵌入的法语像这样的单词和所有英语单词你可以用一种完全不可能的方式进行反向索引类型搜索,除非通过某种方式你通过某种“元信息”机制,XML或HTML等识别某个“类型”的单词。