ckeditor提交时会自动添加换行符<p>/<br/>怎么回事,怎么解决。在哪里设置啊??

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ckeditor提交时会自动添加换行符<p>/<br/>怎么回事,怎么解决。在哪里设置啊??相关的知识,希望对你有一定的参考价值。

参考技术A 看看你的代码里是否有定义的过滤语句
例:<%=html2code(rs("content"))%>
去掉html2code,只保留<%=rs("content")%>
我当时情况是添加它会自动加一行,修改保存也会自动加多一行,结果行高越来越大

如何在 CKEditor 所见即所得编辑器中保留换行符

【中文标题】如何在 CKEditor 所见即所得编辑器中保留换行符【英文标题】:How to keep line breaks in CKEditor WYSIWYG editor 【发布时间】:2013-07-05 20:55:54 【问题描述】:

我有一个HTML代码如下

<div class="editable" ...>
  <div class="code">
    This is an example.
    This is a new line
  </div>
</div>

在 CSS 中,代码具有“word-wrap:pre”属性,这样内部 DIV 中的文本将显示两行。我使用带有 DIV 替换方法的 CKEditor 来编辑它。但是,它变成了

  <div class="code">
    This is an example.This is a new line
  </div>

HTML 标记内的文本将变成一行,开头和结尾的空格和换行被去除。所以在 CKEditor 中,虽然我指定了 config.contentsCss,但它仍然显示一行,因为 CKEditor 已将这两行合并为一行(我在 CKEditor 的 iframe 编辑器中的 Chrome“检查元素”中检查了这一点)。所以,我看源码还是保存的HTML,两行格式没有保留,因为只有一行。

我已经用谷歌搜索并尝试了 CKEditor HTML 编写器或 addRules 来限制开始/关闭标签中的缩进格式和新行,但是,这些似乎适用于 HTML 标签,而不是文档文本。还有其他方法可以保留文本的换行符吗?

【问题讨论】:

您需要在 CKEditor 中格式化代码吗? 不,我不希望代码被格式化,以便在 CKeditor 之前/之后保留所有空格和换行符。 那么你将不得不处理换行符(\n)和的 我不必手动处理换行符。实际上,如果 CKeditor 认为它可以去除所有开头和结尾的空格(^[ \n\r\t]*|[ \n\r\t]*$),这意味着这些不会影响在浏览器中查看的换行符的布局。但是为什么这会影响我在问题中描述的结果,因为我有一个使用 word-wrap: pre 的 CSS 样式,而 CKeditor 不知道这一点。它会删除那些空白并使观看变得奇怪。我找到了解决方案,但是,没有配置选项可以控制它。一个非常小的 hack 是可以接受的。 @jclin 你可以通过回答你自己的问题来分享解决方案吗? 【参考方案1】:

我找到了。

// preserve newlines in source
config.protectedSource.push( /\n/g ); 

http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-protectedSource

【讨论】:

最初我虽然这是一个很好且简单的解决方案,但事实证明它可能会用 <!--cke_protected%A-- >.这在属性值方面不好,所以要小心。【参考方案2】:
$(document).on('paste', 'textarea', function (e) 
    $(e.target).keyup(function (e) 
        var inputText = $(e.target).val();
        $(e.target).val(inputText.replace(/\n/g, '<br />'))
                .unbind('keyup');
    );
);

【讨论】:

这仅适用于paste 事件。如果有人需要在源代码模式下输入多行并保持换行符怎么办? 由于 CKEditor 构建/保留了 HTML 的树模型,因此可能无法保留它。无论如何,它们允许自定义显示:sdk.ckeditor.com/samples/htmlformatting.html【参考方案3】:

使用&lt;pre&gt; HTML 标签。像这样:

<div class="editable" ...>
  <div class="code"><pre>
    This is an example in a "pre".
    This is a new line
  </pre></div>
</div>

<div class="editable" ...>
      <div class="code">
        This is an example NOT in a "pre".
        Therefore this is NOT a new line
      </div>
    </div>

或者您可以在两行之间放置一个&lt;br/&gt; 标签。和回车一样。

【讨论】:

【参考方案4】:

在我的特殊情况下,它是一个额外的标签 univis,我需要提供类似的语义(即,单独留下缩进和 inebreaks),我们最终做的是:

    CKEDITOR.dtd.$block.univis=1;
    CKEDITOR.dtd.$cdata.univis=1;
    CKEDITOR.dtd.univis=CKEDITOR.dtd.script;

但这看起来可能会或可能不会扩展到类。

【讨论】:

将这些行添加到 CKEditor 时会做什么?你是什​​么意思,在你的情况下,“它”是一个额外的标签?当您说“它是提供相似语义的额外标签”时,“它”指的是什么?你的意思是“功能”而不是“语义”这个词 - 即如果你的句子被重写 - 意思是:“在我的情况下,为了获得所需的功能(即单独留下换行符),我们最终这样做了: " 我们试过这个,它似乎对换行没有影响,因为我们在查看源代码和查看 CKEditor 中呈现的 HTML 之间来回切换。【参考方案5】:

我有一些 Craft 网站正在运行,我不想将配置文件粘贴到任何地方。对于其他仍然有问题的人:只需使用 redactor。安装和更换字段类型。将所有内容更正一次即可完成。

【讨论】:

以上是关于ckeditor提交时会自动添加换行符<p>/<br/>怎么回事,怎么解决。在哪里设置啊??的主要内容,如果未能解决你的问题,请参考以下文章

关于ckeditor编辑器的问题.为啥会在源码里自动添加<p>标签,可以不添加吗.

如何配置 ckeditor 不将内容包装在 <p> 块中?

Flux:field.text + CKEditor 在后端添加新的空 <p></p> 每次保存操作

需要在CKEditor中的p标签中添加contentEditable = false

如何在 CKEditor 所见即所得编辑器中保留换行符

CKeditor 在提交某些 html 标签时返回 403