PHP <b> 替换为 <b> [重复]
Posted
技术标签:
【中文标题】PHP <b> 替换为 <b> [重复]【英文标题】:PHP <b> replace to <b> [duplicate] 【发布时间】:2017-12-26 19:30:41 【问题描述】:如果我在数据库中写入输入 &lt;b&gt;
,则写入 &lt;b&gt;
。帮助。
输入代码:
$aprasymas = htmlentities(mysql_real_escape_string($_POST['aprasymas']));
mysql_query("INSERT INTO prekes (pavadinimas, kaina, aprasymas, nuotrauka, cover, kategorija, kiekis) VALUES ('$pavadinimas', '$kaina', '$aprasymas', '$nuotrauka', '$cover', '" . kategorijaid($kategorija) . "', '$kiekis')") or die(mysql_error());
【问题讨论】:
您需要了解转义的工作原理。为数据库调用htmlentities
毫无意义。
不要使用 mysql 函数。它们已被弃用且不安全。选择 mysqli 或其他 _PDO - php.net/manual/en/mysqlinfo.api.choosing.php
我已经看到很多人们想将 HTML 插入 MySQL 的问题,这让我头晕目眩。 HTML 是 HTML,MySQL 是 MySQL。您应该在输出中处理格式;完全是两种不同的动物。数据库用于数据,而不是用于格式化目的。
顺便说一句;甚至 mysql_real_escape_string()
也容易注入 ***.com/a/12118602/1415724 - 最好使用带有准备好的语句的 mysqli 或 PDO api。
【参考方案1】:
因为htmlentities
将&lt;
转换为&lt;
和&gt;
转换为&gt;
更好的方法是将数据以 raw 形式存储到数据库中 - 在您的情况下为 <b>
,然后您在提交数据之前根据最终目的地进行适当的转义目标上下文。
如果您要将数据放入 HTML 文档中,请使用 htmlentities
echo "<td>".htmlentities($databaseResult['aprasymas'])."</td>"
建立一个网址?
header("Location: /page?aprasymas=" .urlencode($databaseResult['aprasymas']));
exit;
但是,如果您将原始数据转换并存储在数据库中,那么您将丢失原始数据。
【讨论】:
“更好的方法是以原始形式将数据存储到数据库中” - This is what I told the OP。我觉得将 HTML 存储在数据库中只是一个坏主意。htmlentities()
旨在在“输出”期间使用。他们可能认为该功能有助于防止 sql 注入,但事实并非如此。甚至mysql_real_escape_string()
也容易被注入***.com/a/12118602/1415724以上是关于PHP <b> 替换为 <b> [重复]的主要内容,如果未能解决你的问题,请参考以下文章