PHP如何将HTML字符串保存到数据库中

Posted

技术标签:

【中文标题】PHP如何将HTML字符串保存到数据库中【英文标题】:PHP how to save HTML string into database 【发布时间】:2016-09-17 06:02:15 【问题描述】:

作为对 API 调用的响应,我得到了一个完整的 html 脚本。完整意味着它包括 HTML CSS 和 javascript。现在我在 php 变量中将该 HTML 作为字符串。

$content = '<html>
<head>
  <script>--Some javascript and libraries included--</script>
  <title></title>
</head>
<body>
   <style>--Some Styling--</style>
</body>
</html>';

现在,将这个变量保存在数据库中的最佳方法是什么?如何?

作为 VARCHAR 或 TEXT 类型的字符串? 作为使用 VARCHAR 或 TEXT 类型进行 Base64 编码的字符串? 作为 BLOB 类型的二进制文件?

或者任何其他你想建议的(可能是序列化或打包)?

【问题讨论】:

***.com/help/someone-answers 在 wp 中他们使用了addslashes(deslash($content)); 。由 wp core 自己编写的 delash 函数,使其泛化并存储在 WordPress 数据库中。它有助于工作。 我希望您的用户不能访问这些 html 数据,否则您将自己打开以进行 xss 攻击 【参考方案1】:

我使用 base64 编码的数据以 BLOB 数据类型存储在我的数据库中。样板代码如下。

$content = '<html>
<head>
  <script>--Some javascript and libraries included--</script>
  <title></title>
</head>
<body>
   <style>--Some Styling--</style>
</body>
</html>';

以base64编码数据

$encodedContent = base64_encode($content); // This will Encode

并使用 BLOB 将数据保存在数据库中。现在检索数据后,只需将其解码如下。

$ContentDecoded = base64_decode($content);  // decode the base64

现在 $contentDecoded 的值是纯 HTML。

【讨论】:

我也想知道反对票。为什么人们不指出错误就投反对票? @e4c5 说:你这样增加存储大小【参考方案2】:

看到这个:我什么都没做......

我像这样使用它..工作得很好,还保存在 mysql 中,也可以正确检索。

    $editorContent = $_POST['textarea'];
    
    $a = $editorContent;
    
    $insert = $db->query("INSERT INTO psd ( psdata) VALUES ( '$a')" );

【讨论】:

这只是获取文本区域的值,而不是任何特殊的 html 标签。 &lt;textarea&gt; 标签本身不会进入数据库......如果你有其他标签,例如&lt;em&gt;&lt;strong&gt; 等混入内容中,我认为这不会照顾到保存它们。【参考方案3】:

使用 addslashes() 函数将 HTML 存储到变量中。

$html = addslashes('<div id="intro">
<div id="about" align="left">
<h2 class="bigHeader" dir="rtl"HEADER</h2>
<img src="img/Med-logo.png"  />
<div id="wellcomePage" class="text-left text" dir="rtl">
<p>...some words....</p>
<p>.some words....</p>
<p>&nbsp;</p>
</div>
</div>
</div>');

在此之后,形成一个 SQL 查询。

$sql = "UPDATE `Pages` SET `content`= '".$html."'";

从数据库检索时必须添加stripslashes

【讨论】:

【参考方案4】:

我建议您使用TEXT。 Blob 通常用于存储图像、音频或其他多媒体对象。阅读更多关于bolobs

在数据库中存储 HTML 的数据类型为 TEXT

使用mysql_real_escape_string()将html文本存储到数据库中

$content = '<html>
<head>
  <script>--Some javascript and libraries included--</script>
  <title></title>
</head>
<body>
   <style>--Some Styling--</style>
</body>
</html>';

$html = mysql_real_escape_string($content);

【讨论】:

谢谢@Manjeet 但是您建议的功能 mysql_real_escape_string 已被弃用。我也看到了这个 htmlspecialchars() 函数,但是在数据库中存储大 html 文档是否安全?因为我从未在数据库中看到过直接的 HTML。【参考方案5】:

您可以使用 base64_encode 并将该字符串存储到带有 text/blob 类型字段的数据库中

【讨论】:

是...在显示时您需要解码该字符串 base64 编码/解码不是必需的,因为 BLOB 可以保存任何类型的数据。而且编码/解码占用CPU和内存。【参考方案6】:

如果对它进行 base64 编码,则存储大小会增加大约 30%,并且每次显示时都需要对其进行解码。查看 Wordpress 的table structure,这是使用最广泛的软件,它使用 php 将 html 存储在 mysql 数据库中。他们用什么?长文。在您的情况下,TEXT 可能更好,因为您可能对页面大小有一个很好的了解。

【讨论】:

谢谢@e4c5 我会看看这个。您建议的链接是更通用的形式。但是是的,我会看看 WP 是如何处理这个问题的。 不,这只是一个例子,无需深入挖掘。只需使用 TEXT,但不要打扰 base64 编码 @e4c5 如果 HTML 超出我们的控制范围怎么办?例如,如果我从互联网上获取一个随机站点,我是否应该在存储之前对其进行编码?这是否有助于防止潜在的 sql 注入? 您应该使用准备好的语句来避免 sql 注入。首先,您不应该允许将超出您控制范围的 HTML 保存在数据库中,这将使您对 XSS 攻击敞开大门

以上是关于PHP如何将HTML字符串保存到数据库中的主要内容,如果未能解决你的问题,请参考以下文章

保存画布图像(将数据字符串发布到 PHP)

如何将数据持久保存从 PHP 到 Android [关闭]

如何将php字符串保存到javascript

如何使用 PHP 从 base64 编码的数据/字符串创建图像并将其保存到网站文件夹

将日文字符保存到 MySQL

php 中, 字符串怎么参加到代码中执行