【问题标题】:CKEditor adds <p>&nbsp;</p> after initializingCKEditor 初始化后添加 <p> </p>
【发布时间】:2026-02-21 22:15:02
【问题描述】:

我已经尝试了各种设置来解决这个问题,但到目前为止我还没有运气。我在我的 angular(1.5.6) 应用程序中运行 CKEditor。一开始我用的是angular directive,但是在遇到这个问题后,我尝试用尽可能少的东西运行CKEditor来找到这个问题的原因。

Atm 这就是我的控制器中的全部内容:

$scope.description = "<p>test</p><p>test</p>";
CKEDITOR.replace('description');
CKEDITOR.instances['description'].setData($scope.description);

在我看来:

<div id="description"></div>

初始化后,我将在编辑器中看到:

<p>test</p>

<p>test</p>

<p>&nbsp;</p>

每次加载 CKEditor 时,它都会添加这个空段落。现在,如果我保存这个空段落将保存到数据库中。再次加载时,它将有 2 个空段落。

这是我尝试解决此问题的设置列表。主要是我一个一个用过。

$scope.ckEditorOptions = {
    ignoreEmptyParagraph: false,
    enterMode: CKEDITOR.ENTER_BR,
    autoParagraph: false,
    fillEmptyBlocks: false,
    shiftEnterMode: CKEDITOR.ENTER_BR,
    basicEntities: false,
    tabSpaces: 0,
};

【问题讨论】:

  • 这是一个已知问题,我相信它从未得到解决。每当我使用 CKEditor 遇到这种情况时,我通常不得不在保存到数据库时(或在使用 JS 发布表单之前)格式化第一个空的 &lt;p&gt;
  • 好的。谢谢(你的)信息。我也会在保存时删除后端中的空

标签: javascript angularjs ckeditor


【解决方案1】:

我对类似的问题感到困惑(使用 CKGEdit for DokuWiki 和 CKEditor 在页面顶部和某些元素下方添加空段落)。 现在通过将其添加到 config.js 的底部来绕过它:

var ed = CKEDITOR.instances.wiki__text;
var t = ed.getData().replace(/<p>[\s*|&nbsp;]<\/p>/gm,'');
ed.setData(t, function() {
    this.checkDirty();
});

..这可能是对处于相同情况的其他人有用的东西的基础。

如果不引入其他问题(例如破坏 wiki 标记),所有编辑器选项都没有帮助。

【讨论】:

    【解决方案2】:

    我正在使用 V4.16。每次我点击“保存”按钮时,它都会在文本的开头和结尾添加一个 p 标签和一个不间断的空格。我对配置文件进行了所有建议的操作,但没有运气。所以现在我对从编辑器到数据库的文本使用 PHP 函数 str_replace()。不是很优雅,但很管用!

    【讨论】: