PHP <b> 替换为 <b> [重复]

Posted

技术标签:

【中文标题】PHP <b> 替换为 <b> [重复]【英文标题】:PHP <b> replace to &lt;b&gt; [duplicate] 【发布时间】:2017-12-26 19:30:41 【问题描述】:

如果我在数据库中写入输入 &amp;lt;b&amp;gt;,则写入 &amp;lt;b&amp;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&amp;lt; 转换为&amp;lt;&amp;gt; 转换为&amp;gt;

更好的方法是将数据以 raw 形式存储到数据库中 - 在您的情况下为 &lt;b&gt;,然后您在提交数据之前根据最终目的地进行适当的转义目标上下文。

如果您要将数据放入 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> [重复]的主要内容,如果未能解决你的问题,请参考以下文章

替换一些文本后保留 HTML 格式(使用 PHP 和 JS)

009-PHP循环输出数组成员

PHP:正则表达式替换,同时忽略html标签之间的内容

PHP-逆多复制

PHP 随笔

a表字段替换B表字段