数据库条目中的 html 标记未呈现为 html

Posted

技术标签:

【中文标题】数据库条目中的 html 标记未呈现为 html【英文标题】:html tags in DB entry not rendering as html 【发布时间】:2019-07-22 06:24:15 【问题描述】:

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

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

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

“<p>Paragraph 1</p><p>Paragraph 2</p>”

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

<p>”Paragraph 1”</p><p>”Paragraph 2”</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; ?>

解决问题!!

【问题讨论】:

这与 mediumtext vs text 无关,它们只是最大长度不同的文本数据类型。这更有可能与数据库内容输出到页面的方式有关。 @04FS 说了什么!此外,它可能与您使用 ckeditor 的方式有关,您使用的是 setData() 方法吗? 感谢@04FS 的回复。我所做的只是查询数据库并显示如下:&lt;tbody&gt; &lt;tr&gt; &lt;td class="details"&gt;&lt;?php echo ($rsCurrentEnquiry-&gt;getColumnVal('notes_c')); ?&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; 谢谢@H。菲格雷多为您的回应。我所做的只是使用插件的基本安装来使用它的功能。我检查了文档,但不确定如何使用 setData() 方法来帮助解决问题。 如果您发布更多代码(特别是 javascript)会很有帮助。 setData() 是接收字符串并用字符串填充 CKeditor 的方法(它尊重 html 标签,因此它们应该有效) 【参考方案1】:

我也遇到了同样的问题。我已经通过手动将转义码转换为普通字符来解决它。

【讨论】:

【参考方案2】:

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

值得注意的是,您应该使用这些方法从 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 从您的数据库 (&lt;p&gt;Paragraph 1&lt;/p&gt;&lt;p&gt;Paragraph 2&lt;/p&gt;) 接收数据,然后执行类似于我在此 JsFiddle 中所做的操作

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

【讨论】:

没有问题!如果您将答案标记为正确,如果它符合您的需要,我将不胜感激。 您使用一个按钮调用带有onclick 的函数,它将notes_c 的实例放入&lt;div id="output"&gt;。我不确定如何适应这一点。我有带有ckeditor的textarea提交到数据库。然后我查询数据库并在表中显示数据&lt;tbody&gt; &lt;tr&gt; &lt;td class="details"&gt;&lt;?php echo ($rsCurrentEnquiry-&gt;getColumnVal('notes_c')); ?&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; 我可以在哪里或如何将函数应用于此? 哦!您想要在表格中检索到的文本吗?嗯,所以每一段都是一列?或者只是每个单元格都有来自 ckeditor 的值? 我认为它在表格中的事实可能会产生误导。它只是出于样式目的,因为它与使用来自同一查询的不同数据绑定的其他表一样。如果您在上面看到我的示例。您会看到显示 notes_c 绑定的表格是单行单列。所以显示数据的&lt;td&gt; 标记也可能是&lt;div&gt;,我认为这个问题也是一样的。希望这是有道理的。 是的,这是有道理的,检查edit2!你所说的让我觉得你的问题是 HTML 格式错误,就像一个未封闭的标签,你的那种东西。

以上是关于数据库条目中的 html 标记未呈现为 html的主要内容,如果未能解决你的问题,请参考以下文章

从 XML(或 HTML)读取未标记的文本

Javascript:body.append(content) 未呈现为 html [重复]

将模板变量呈现为 HTML

Django:引导输入组未使用表单呈现所需的 HTML/CSS

带有 <systemPath> 标记的 Maven 项目 POM 中的条目未包含在生成的战争文件 WEB-INF\lib 文件夹中

多个条目同名html表单