首页 > 解决方案 > 数据库条目中的 html 标记未呈现为 html

问题描述

我有一个带有注释部分的表单,它使用ckeditor以便在提交到 MySQL 数据库时将段落分开。所以两个段落将提交如下:

<p>Paragraph 1</p><p>Paragraph 2</p>

我的问题是当这些数据显示在网页上时,HTML 标签也没有像我预期的那样被读取为 HTML。当我在开发工具中查看页面时,它会在第一个和最后一个 HTML 标记之外显示引号,如下所示。这表明标签被视为文本。

“&lt;p>Paragraph 1</p><p>Paragraph 2</p>”

我在另一个网站上做同样的事情,但这次工作正常并且正确呈现 HTML 标签。当我在开发工具中查看它时,它会在每个段落的 HTML 标记内显示引号,如下所示。毫不奇怪,这些标签被视为 HTML。

<p>”Paragraph 1”&lt;/p><p>”Paragraph 2”&lt;/p>

两者的区别在于能正确显示的是“mediumtext”类型,而不能正确显示的是“text”类型。另外一个不能正确显示的是使用 ckeditor 插件。

我只是使用以下内容来添加 ckeditor 功能:

<textarea rows='4' type="text"  class="notes_c" id="notes_c" 
name="notes_c" value=""></textarea>

<script type="text/javascript" src="../ckeditor/ckeditor.js"></script>
<script>
CKEDITOR.replace('notes_c');
</script>

非常感谢任何帮助了解这里发生的事情。

对此的更新是我尝试使用 html_entity_decode 和以下内容:

<?php 
$note = $rsCurrentEnquiry->getColumnVal("notes_c"); 
$p = html_entity_decode($note);
?>
<?php echo $p; ?>

哪个解决了问题!!

标签: javascriptphphtmlmysqlckeditor

解决方案


所以,我为你创造了一个小提琴,我认为你的意图。

值得注意的是,您应该使用这些方法从 CKeditor 获取/设置数据(当然,当动态获取/设置数据时):

CKEDITOR.instances.notes_c.getData();
CKEDITOR.instances.notes_c.setData(data_string);

notes_c- 是 CKeditor 所在的 div 的 id/name/class。

如果有任何其他问题,请随时提问。

编辑:小提琴链接已损坏,现在已修复。还添加了另一个按钮来显示 getData 和 setData。

JSFiddle

EDIT2:对不起,我确实误解了你的问题。因此,使用 javascript,我将使用 AJAX 从您的数据库 ( <p>Paragraph 1</p><p>Paragraph 2</p>) 接收数据,然后执行类似于我在此JsFiddle中所做的操作

请注意,通过使用 PHP,如果 HTML 标记在您要插入的文本之前错误地关闭或格式错误,那么 PHP 将附加到格式错误的 HTML 并可能将您的字符串解释为只是一个字符串,而忽略 HTML 标记里面。


推荐阅读