我正在尝试使用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;
答案 0 :(得分:1)
答案
您的数据可能已被编码两次。尝试echo $content;
,然后转到浏览器中的查看源代码。如果它以&lt;div&gt;
开头,那么您需要运行html_entity_decode
两次。但是,很少有理由将HTML存储在数据库中并且编码实体。将它原始存储并在需要时对其进行编码更有意义(例如,如果将代码放入textarea中)。
$content = html_entity_decode(html_entity_decode($dataToLoad['Text']));
echo $content;
推理
原因是因为数据库中的原始数据如下所示:
&lt;div&gt;stuffInDiv&lt;/div&gt;
您的浏览器会在屏幕上打印出来:
<div>stuffInDiv</div>
第一次运行html_entity_decode
时,它就是这样,即用&
字符替换&
(&
是符号的代码)。< / p>
这会产生:
<div>stuffInDiv</div>
网页吐出编码实体,即:
<div>stuffInDiv</div>
第二次运行html_entity_decode
会将<
替换为<
(小于号码),>
替换为>
(大于号码)等。
这会产生:
<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'] = '<div>stuffInDiv</div>';
echo str_replace($ar, array_keys($ar), $dataToLoad['Text']);