如何使用PHP将html插入数据库


How to insert html into database using PHP

我有以下html代码:

<div class=" modal" id="indexModal">
    <span class="thing"></span>
    <a href="#" class="closeMe" title="Inchide">&#238;nchide</a>
    <h2 class="title">Promo&#355;ia lunii februarie!</h2>
    <div>
        <h3>Beneficia&#355;i de promo&#355;ia sezonului.</h3>
        <p>&#206;n luna Februarie,  v&#259; ofer&#259; posibilitatea de a achizi&#355;ioana, solarii profesionale  &#351;i hobby, sisteme de irigatii, folie &#351;i accesorii  cu o reducere de 10% aplicat&#259; la pre&#355;ul de producator.</p>
        <a href="http://www.domain.com/solarii/10/solarii-profesionale-latimi-6m-sau-8m" class="orangeButton">vede&#355;i oferta special&#259;!</a>
    </div>
</div>

我想把它插入数据库,但它不能保存全部内容。我尝试在插入时使用htmlentities(),在想要显示html时使用html_entity_decode()。但我得到的只是:

<div class=" modal" id="indexModal">
    <span class="thing"></span>
    <a href="#" class="closeMe" title="Inchide">închide</a>
    <

你能向我解释一下,如何在数据库中安全地插入一些html而不会出现问题,以及如何在页面上显示这些html吗?我的表是utf8_general_ci字符集。

简短的回答是"不要将HTML放入数据库"。

这里面有很多很好的理由。其中包括:

  • 无法在另一个非HTML上下文中重复使用数据
  • 无法提取包含其他数据的数据
  • 你最终会遇到像现在这样的编码问题
  • 如果你想改变网站的布局方式,你必须更新每个数据库字段,而不仅仅是一个HTML模板

使用PHP只提取和存储文本或数字,并将它们存储在一组适当的关系表中。如果你不确定如何做,花点时间学习,否则当你不可避免地想将网站扩展到其他你还没有想到的事情,或者改变它的工作方式时,你会发现更多的头痛。

您需要更改数据库结构以接受更多字符。示例:将您的列类型设置为varchar 250(或您需要的字符数)*但它确实有最大字符数。

我不确定安全插入是什么意思,如果你的意思是用字符集得到有趣的字符,那么尝试以下两个步骤

1)首先你需要检查你的mysql设置为什么字符集。不同的设置默认为不同的设置。我通常选择utf8。更改和设置应该相当简单。来自mysql管理员或其他工具。请参阅以下内容http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html

2)然后你的html文档标题,如果你添加以下元标签

<meta http-equiv="content-type" content="text/html;charset=UTF-8" />

这应该将两个字符集链接起来,并删除有趣的字符

只需使用PDO prepare语句,它将允许在数据库中添加任何类型的文本。它实际上会将所有变量视为文本,因此它会以您想要的方式添加像这样:

$host = 'localhost';
$user = 'root';
$password = '';
$dbname = 'myDatabase';

$dsn = 'mysql:host='.$host.';dbname='.$dbname.';charset=utf8mb4';
$conn = new PDO($dsn, $user, $password);
$conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$query = "INSERT INTO yourTable(someColumn, messageHTML) VALUES (?, ?)";
$stmt = $conn->prepare($query);//This is the line that will consider all as text
$stmt->execute([$something, $html]);