从数据库中回显html

时间:2014-03-17 22:55:00

标签: php

我正在尝试使用php将mysql数据库中的html数据写入文档。我的代码如下:

$content = html_entity_decode($dataToLoad['Text']);
echo $content;

$ dataToLoad [' Text']包含来自数据库的此文本数据:

<div>stuffInDiv</div>

我想要发生的是将此文本写为文档中的实际div元素,而是将其写为字符串。我如何强制php将其写为元素?

为清晰起见而更新:

为了澄清,我的问题不是解码数据库中的html实体,而是将解码后的html写入文档。当我这样做时:

echo $content;

其中$ content包含

<div>stuffInDiv</div>

我得到了字符串"<div>stuffInDiv</div>",当我真正想要的是一个包含字符串&#34; stuffInDiv&#34;

的div

2 个答案:

答案 0 :(得分:1)

答案

您的数据可能已被编码两次。尝试echo $content;,然后转到浏览器中的查看源代码。如果它以&amp;lt;div&amp;gt;开头,那么您需要运行html_entity_decode两次。但是,很少有理由将HTML存储在数据库中并且编码实体。将它原始存储并在需要时对其进行编码更有意义(例如,如果将代码放入textarea中)。

$content = html_entity_decode(html_entity_decode($dataToLoad['Text']));
echo $content;

推理

原因是因为数据库中的原始数据如下所示:

&amp;lt;div&amp;gt;stuffInDiv&amp;lt;/div&amp;gt;

您的浏览器会在屏幕上打印出来:

&lt;div&gt;stuffInDiv&lt;/div&gt;

第一次运行html_entity_decode时,它就是这样,即用&amp;字符替换&&amp;是符号的代码)。< / p>

这会产生:

&lt;div&gt;stuffInDiv&lt;/div&gt;

网页吐出编码实体,即:

<div>stuffInDiv</div>

第二次运行html_entity_decode会将&lt;替换为<(小于号码),&gt;替换为>(大于号码)等。

这会产生:

<div>stuffInDiv</div>

将以以下方式输出到您的页面:

stuffInDiv

您的数据库设置

作为您数据库的注释:

在数据库中存储信息时,不要对HTML进行编码。除非将HTML输出到网页上,否则它与任何其他字符串没有区别,您不应该以不同的方式对待它。因此,如果要将数据添加到数据库中包含代码的表中,只需执行以下操作:

INSERT INTO `my_content` (`name`, `content`) VALUES ("My Page", "<div>stuffInDiv</div>");

如果您是从textarea获取此数据,请使用:

$connection->query('INSERT INTO `my_content` (`name`, `content`) VALUES ("'.$connection->real_escape_string($_POST['name']).'", "'.$connection->real_escape_string($_POST['content']).'");');

没有做任何事来操纵$_POST['content']的价值。如果您需要将数据放回textarea(例如,编辑页面):

$result = $connection->query('SELECT `content` FROM `my_content` WHERE `name` = "'.$connection->real_escape_string($_GET['edit_page']).'");');
if ($row = $result->fetch_assoc()) {
    print '<textarea name="content">'.htmlentities($row['content']).'</textarea>';
}

答案 1 :(得分:0)

你可以用str_replace替换html实体......(但肯定有一种更简单的方法)

$ar = get_html_translation_table();
$dataToLoad['Text'] = '&lt;div&gt;stuffInDiv&lt;/div&gt;';
echo str_replace($ar, array_keys($ar), $dataToLoad['Text']);