数据库条目中的 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 的回复。我所做的只是查询数据库并显示如下:<tbody> <tr> <td class="details"><?php echo ($rsCurrentEnquiry->getColumnVal('notes_c')); ?></td> </tr> </tbody>
谢谢@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 从您的数据库 (<p>Paragraph 1</p><p>Paragraph 2</p>
) 接收数据,然后执行类似于我在此 JsFiddle 中所做的操作
请注意,使用 PHP 时,如果 HTML 标记在您要插入的文本之前被错误关闭或格式错误,那么 PHP 将附加到格式错误的 HTML 并可能将您的字符串解释为只是一个字符串,而忽略里面的 HTML 标签。
【讨论】:
没有问题!如果您将答案标记为正确,如果它符合您的需要,我将不胜感激。 您使用一个按钮调用带有onclick
的函数,它将notes_c 的实例放入<div id="output">
。我不确定如何适应这一点。我有带有ckeditor的textarea提交到数据库。然后我查询数据库并在表中显示数据<tbody> <tr> <td class="details"><?php echo ($rsCurrentEnquiry->getColumnVal('notes_c')); ?></td> </tr> </tbody>
我可以在哪里或如何将函数应用于此?
哦!您想要在表格中检索到的文本吗?嗯,所以每一段都是一列?或者只是每个单元格都有来自 ckeditor 的值?
我认为它在表格中的事实可能会产生误导。它只是出于样式目的,因为它与使用来自同一查询的不同数据绑定的其他表一样。如果您在上面看到我的示例。您会看到显示 notes_c 绑定的表格是单行单列。所以显示数据的<td>
标记也可能是<div>
,我认为这个问题也是一样的。希望这是有道理的。
是的,这是有道理的,检查edit2!你所说的让我觉得你的问题是 HTML 格式错误,就像一个未封闭的标签,你的那种东西。以上是关于数据库条目中的 html 标记未呈现为 html的主要内容,如果未能解决你的问题,请参考以下文章
Javascript:body.append(content) 未呈现为 html [重复]
Django:引导输入组未使用表单呈现所需的 HTML/CSS
带有 <systemPath> 标记的 Maven 项目 POM 中的条目未包含在生成的战争文件 WEB-INF\lib 文件夹中