HTML 数据库中的代码

HTML code in a database

将 html 代码放入 MySql 数据库是一种好习惯吗?。更具体地说,我有一个博客。我在数据库中为每个部分都有一个单独的字段:页面标题(元数据)、描述、post 的标题、post 的 body... body 的字段有时需要 html 或区分每个 [=32= 的 body 文本之间的字幕、img 或视频及其字幕的方法].

我是唯一一个将内容放入该数据库的人。所以我想我不需要清理任何 html.

我不建议将 HTML 存储在您的数据库中,因为它需要太多的清理来防止在您的数据库中存储恶意 Javascript 代码。因此,您可以使用 PHP markdown 库以人类直观的格式很好地格式化您的消息,当您显示它时将解析为 HTML,类似于 Whosebug 或 Github。

参见:http://parsedown.org/

示例:

1. List 1
2. List 2

转换为:

<ol>
   <li>List 1</li>
   <li>List 1</li>
</ol>

对于评论中提到的Youtube embedding,有一个简单的markdown解决方案:添加一个额外的markdown规则!

您可以像这样使 markdown 语法简洁:@[Alt text] (YouTube-code)

这将转化为以下 HTML:

<iframe class="youtube" width="560" height="315" src="http://www.youtube.com/embed/{{YouTube-code }}?wmode=opaque" frameborder="0" allowfullscreen>{{ Alt text }}</iframe>

查看有关如何为 YT 实施此降价语法的信息来源:

https://github.com/michelf/php-markdown/issues/130

就博客而言,最好将博客添加到数据库中。因为有很多 html 标签需要在不同的地方实现,所以我们不能静态地或通过代码来实现。

将正文存储到数据库的最佳方式:- 尝试在要放入数据库的字符串上使用 htmlspecialchars(),然后在将其拉回时使用 htmlspecialchars_decode()

希望对您有所帮助。

没有"right"方法。

在数据库中存储HTML完全没有问题。 SO 将 Markdown 和呈现的 HTML 存储在数据库中。提供 HTML 可以更快地呈现页面,因为 Markdown 已经被解析。如果一个post被编辑,Markdown将被再次解析为HTML并存储在数据库中。

另一种方法是只保存 Markdown(或 HTML)。因为只有您会创建页面,所以没有必要检查输入的恶意代码。如果您仍想这样做,我建议您查看 HTMLPurifier,它非常有用。

问题:将 HTML 代码存储在 MySQL 数据库中是好的做法吗?

答案:不,不是。

您永远不应显示来自数据库的 HTML 代码。始终假设数据库 (XSS) 中可能存在恶意 HTML 代码,即使您是唯一有权访问它的人。永远不要显示这个 HTML.

使用其他库或格式将标签转换为 HTML。它允许您像这样存储字幕:[subtitle]This Subtitle[/subtitle] 并稍后将这些标签转换为(示例)<h2>This Subtitle</h2>.

这样,当您想要将字幕从 <h2> 更改为 <h3> 时,您只需在一个地方执行此操作,而不用更改您发表的每篇博文。

另一个例子是 youtube 视频:假设您存储 HTML。明天,YouTube 将更改其播放器,您必须更改您发布的每个 YouTube 视频。如果您使用 [youtube]http://www.youtube.com/whatevervide[/youtube],那意味着您只需更改 HTML 代码一次。