MySQL 数据库中的 HTML -- 最佳实践

标签 html mysql

我开始创建一个系统,我(作为目前唯一的用户)将加载一个动态创建的 PHP 页面,该页面具有 <table>在里面。然后我将获取那个 <table> 的 HTML并将其保存以在网站的单独区域中显示给其他用户。

我的问题:对于这类事情,可以遵循哪些最佳实践?在 MySQL 中将 HTML 保存为 TEXT 或 LONGTEXT? Blob ?甚至可以将此数据保存为使用 PHP 的 .txt 文件 include()将其包含到向用户显示的文件中?

我真的不确定这种事情的最佳方法,因此问题接二连三。我也不太熟悉创建数据库,因此,我不了解它们的优点/缺点。 似乎使用 MySQL 数据库是可行的方法,但我不喜欢它。

注意 #1:HTML 必须完整保留。所以像 <div>Let's use blue for this.</div>不能以 <div>Let\'s use blue for this.</div> 的形式结束.

注意#2:我保存的表格每次都是随机生成的(包括行数/列数)。所以,我需要表中的所有数据,包括所有 <tr>的和<td>'s .

最佳答案

MySQL 和 HTML 文件都可以工作。您的选择应取决于数据的简单程度以及您存储的数量。

一些注意事项:

  1. 速度。 HTML 文件和 include()方法会更快。文件系统是最快、最简单的数据持久化形式。

  2. 水平可扩展性。如果您采用文件系统方法,您或多或少会受限于该机器上的磁盘。使用单独的数据库引擎,您将来可以选择在网络上的单独集群服务器上运行数据库。

  3. 元数据。您是否需要存储诸如创建时间、哪个用户创建了 HTML、其他用户查看了多少次之类的信息?如果是这样,您可能只有一个现实的选择——一个“合适的”数据库。这可以是 MySQL,也可以是 NoSQL 解决方案之一。

  4. 数据消耗。您是否向其他用户完整显示表格?或者你展示它的选定部分?不同的用户甚至可能有不同的部分?这会影响您存储数据的方式 - 整个表作为一个实体,或每一行作为一个实体,或每个单独的单元格。

  5. TEXT 还是 LONGTEXT? 当然只有在您使用 SQL 时才适用。回答这个问题的唯一方法是知道您希望每个“HTML 片段”存储多少字节。请注意,您的字符编码也会影响存储的字节数。引用:TINYTEXT, TEXT, MEDIUMTEXT, and LONGTEXT maximum storage sizes

另请注意,在 MySQL 中,每个 TEXT/LONGTEXT 也可能导致对磁盘的 I/O。

至于问题:

The HTML must be preserved in its entirety.

只要您在任何时候都不对 HTML 进行转义,就应该没问题。乍一看,这违反了安全最佳实践,但如果你仔细想想,“不转义 HTML”正是你想要做的。转义 HTML 输出的做法仅有助于消除被解析为 HTML 标记(潜在恶意)的 HTML 语法,但在您的情况下,您根本不希望消除 HTML 语法 - 您有意想要 <td>被解析为实际的 HTML 表格单元格。所以不要逃避任何事情,你给出的例子永远不会发生。

请注意:尽管您没有对输出进行 HTML 转义,您仍然应该过滤您的输入。本质上,这意味着:在写入您的数据库之前,检查用户输入确实是 HTML。为了增强应用程序的安全性,为可以存储在这些表格单元格中的内容定义规则也可能是明智的 - 也许没有 <iframe><a>允许,不 style允许的属性等。另外,注意 SQL 注入(inject) - 使用 PDO如果您要使用 PHP + MySQL,则准备好语句。

关于MySQL 数据库中的 HTML -- 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30696962/

相关文章:

mysql - 无法通过 SSH 在 R 中连接到 MySQL 服务器

java - 我可以在不重新运行迁移的情况下修复 Flyway 中的版本号吗?

php - 如何将多个复选框值传递给 php

iphone - 用于 iPhone/iPad 的 HTML 单位

javascript - 如果 jQuery 已经在做所有事情,为什么我们需要 React

Javascript 仅在元素进入视口(viewport)后的一段时间内向元素添加类

html - 如何使用CSS更好地对齐html页面中圆圈内的文本?

mysql - MySQL中如何将列名转移到结果集?

php - Mysqli准备语句图像获取错误

MYSQL - 选择每个股票组的最新3条记录