我有以下html代码:
<div class=" modal" id="indexModal">
<span class="thing"></span>
<a href="#" class="closeMe" title="Inchide">închide</a>
<h2 class="title">Promoţia lunii februarie!</h2>
<div>
<h3>Beneficiaţi de promoţia sezonului.</h3>
<p>În luna Februarie, vă oferă posibilitatea de a achiziţioana, solarii profesionale şi hobby, sisteme de irigatii, folie şi accesorii cu o reducere de 10% aplicată la preţul de producator.</p>
<a href="http://www.domain.com/solarii/10/solarii-profesionale-latimi-6m-sau-8m" class="orangeButton">vedeţi oferta specială!</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]);