将html放入数据库是错误的吗?
例如贝宝按钮...
还是用几个换行符阻止文本?
I think that in general this is to be avoided if possible. Traditionally, HTML markup on a website is either static, or part of a template; in which case it does not belong in the database. There are of course exceptions to this rule: for example, some content-management systems allow content administrators to work with basic HTML tags. I'm pretty sure HTML tags within Stack Overflow's editable content gets written into a database.
More important than rules like don't put HTML into a database is ensuring that your overall architecture is sound; and that you're allowing different components like the web server and the database to fulfill the functions that they're designed for.
问题不在于是否将其放在表上的列上,而是此类事情如何使您的应用程序在更新、数据检索等方面变得复杂。您需要对此做出判断,但这当然并不少见。
只要您意识到您放置的 HTML 应该严格用于显示目的,就没有真正的错误,例如在您希望以特定方式显示的字段中存储一些文本,以便您为此目的添加一些标签如果您认为很难在客户端以相同的方式操纵文本,但不要将 html 存储在您认为可能用于搜索或作为参考的文件中。
我完全不同意任何说这是“错误”的人!然而,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 INTO
s 或UPDATE
s 之前“规范化”您的标记:目的本质上是使任何看起来相同的字段在 HTML 上下文中显示时具有完全相同的标记...根据我的经验,实现这一点绝非易事,但并非不可能。 HTML Tidy可能会对此有所帮助,但我认为它不一定会完成“规范化”所需的一切。
* 顺便说一句,这种标记可能不是纯粹用于“修饰”目的:假设您使用 Lucene/Elasticsearch 类型的倒排索引对所有这些“定义/解释”字段进行索引:通过标记所有嵌入的法语单词和所有像这样的英语单词你可以用一种完全不可能的方式进行倒排索引类型搜索,除非你通过某种“元信息”机制、XML 或 HTML 等来识别某种“类型”的单词。
这没有错(您可能不想索引该列),但允许普通用户完整提名内容是非常错误的;您不希望普通用户插入任意 javascript 内容!如果用户必须首先证明他们有很高的特权(例如,网站所有者),或者如果您是从渲染器(例如,Markdown)生成 HTML 并存储渲染结果,那也没关系。
注意不要将 HTML 文档与 HTML 片段或纯文本混淆;它们是不同的,您应该始终知道自己在使用什么……</p>