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

如何使用PHP将html插入数据库,php,html,database,Php,Html,Database,我有以下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&

我有以下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>

宣传片ţ;2月1日!
受益人ţ;我是促销员ţ;西索努利亚。
Î;n luna Februarie,vă;奥费尔ă;阿奇奇的可能性&355;ioana,solarii Professionale和351;i hobby,irigatii系统,folie&351;1.将铜还原至10%的适用范围ă;la preţ;ul-de-producator

我想把它插入数据库,但它不能保存全部内容。我尝试在insert上使用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\u general\u ci字符集。

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

简短的回答是“不要将HTML放入数据库”

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

  • 在另一个非HTML上下文中重用数据是不可能的
  • 无法提取与其他数据关联的数据
  • 您最终会遇到像现在这样的编码问题
  • 如果您希望更改站点的布局方式,则必须更新每个数据库字段,而不仅仅是一个HTML模板

使用PHP提取和存储文本或数字,并将它们存储在一组适当的关系表中。如果您不确定如何操作,请花时间学习,否则,当您不可避免地想将网站扩展到其他您尚未想到的内容,或改变其工作方式时,您会发现更多的问题。我不确定您所说的安全插入是什么意思,如果你的意思是用字符集获得有趣的角色,那么请尝试以下两个步骤

(一) 首先,您需要检查mysql设置为什么字符集。不同的设置默认为不同的设置。我通常选择utf8。它应该是相当直接的改变和设置。来自mysql管理员或其他工具。见下文

(二) 然后,如果添加以下元标记,则显示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]);

存储HTML的字段的大小限制是多少?数据库字段是如何定义的?指定的字段长度是多少?为什么需要将HTML插入数据库?太没有条理了。@zuzuleinen请将字段更改为
text
尝试将其更改为更大的数字。或者将数据类型从varchar更改为text这肯定是答案。。将html放在关系数据库中让我感觉脏兮兮的:将html放在数据库中有什么问题?只要它是安全的、正确的,并且您信任所有可能使用它的人,就不应该有任何问题。例如Wordpress或其他内容管理系统。@Henesnarfel你是对的-它不一定会立即引起问题,但它严重限制了你扩展和改进系统的能力,并使将来的更改变得困难和昂贵。考虑到软件开发中唯一有保证的事情是更改,这是无论如何都要避免的。你可能(希望)会发现Wordpress开发人员将此描述为不理想,如果他们正在这样做的话。