Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 如何强制CKEditor保存<;br>;标签_Html_Ckeditor - Fatal编程技术网

Html 如何强制CKEditor保存<;br>;标签

Html 如何强制CKEditor保存<;br>;标签,html,ckeditor,Html,Ckeditor,我在标准包中使用了最新版本的CKEditor(到目前为止为4.7),我希望能够强制它保留换行元素() 我尝试使用以下配置,但未成功: CKEDITOR.replace('ck', { allowedContent: true, enterMode: CKEDITOR.ENTER_BR }); 正如您所看到的,在开源模式下,标记已被替换为 如何实现这一点?据报道,CKeditor的开发人员告诉我们,br到nbsp自动转换不是一个问题,而是CKeditor规范化事物的方法 它不会给

我在标准包中使用了最新版本的CKEditor(到目前为止为4.7),我希望能够强制它保留换行元素(

我尝试使用以下配置,但未成功:

CKEDITOR.replace('ck', {
    allowedContent: true,
    enterMode: CKEDITOR.ENTER_BR
});
正如您所看到的,在开源模式下,

标记已被替换为


如何实现这一点?

据报道,CKeditor的开发人员告诉我们,br到nbsp自动转换不是一个问题,而是CKeditor规范化事物的方法

它不会给你带来任何问题。因此,您不必担心您的br标记被转换为nbsp 再看一遍

如果您希望从源代码中删除,其中一种方法是包括以下内容:

 basicEntities: false,
 entities_additional: 'lt,gt,amp,apos,quot'
对此给出了一个解决方案(或至少部分解决方案),强制CKEditor保留

标记:

editor.on( 'pluginsLoaded', function( evt ){
    evt.editor.dataProcessor.dataFilter.addRules({
        elements :{
            br : function( element ) {          
                //if next element is BR or <!--cke_br_comment-->, ignore it.
                if( element && element.next && ( element.next.name == 'br' || element.next.value == 'cke_br_comment' ) ){
                    return;
                }else {
                    var comment = new CKEDITOR.htmlParser.comment( 'cke_br_comment' );
                    comment.insertAfter( element ); 
                }
            }
        }
    });

evt.editor.dataProcessor.htmlFilter.addRules({
    comment : function( value, node ) {
        if( value.indexOf('cke_br_comment') >= 0 ) {
            return false;
        }
    }
});
editor.on('pluginsload',函数(evt){
evt.editor.dataProcessor.dataFilter.addRules({
要素:{
br:函数(元素){
//如果下一个元素是BR或,则忽略它。
if(element&&element.next&&element.next.name='br'| | element.next.value==''cke_br_comment')){
返回;
}否则{
var comment=new CKEDITOR.htmlParser.comment('cke_br_comment');
注释。插入者(要素);
}
}
}
});
evt.editor.dataProcessor.htmlFilter.addRules({
注释:函数(值、节点){
if(value.indexOf('cke\u br\u comment')>=0){
返回false;
}
}
});


编辑:您可能还想查看my,根据您的需要,这可能会更好。

我想我找到了一个更好的答案,它适用于更多情况:引入“brangel”插件:

其思想是在CKEditor的过滤阶段(请参阅和事件)发生之前,通过临时将

元素替换为一些占位符文本(
{cke_br}
)来保存

元素,以防止其被破坏,然后在最后将它们还原回来。这对用户来说是完全透明的


.

您提供的小提琴将不使用任何内容替换
div
之外存在的任何中断标记。这将显示那些标记被替换为
的外观。如果清除编辑器,请添加相同的文本,然后单击“源”,它将显示

标记被保留。为了保留

标记,它们必须是
的子标记。您的应用程序是否可以反映这一点?不幸的是,我无法控制哪些内容加载到我的CKEditor中。内容由我的客户端发送,然后加载到CKEditor中,而他是预期的我想这会对你有帮助:@mohammedyasinsinechabli我已经在使用这个配置了。
br
标记被使用了,这不是问题。问题是CKEditor删除了一些
br
标记,并用
替换它们。你是在简单的html或模板引擎中使用CKEditor吗?我知道这不是一个问题,因为输出看起来是一样的。但是,如果你认为消息可以从第三方工具中解析出来,这可能成为一个问题。考虑一下你的答案与你给我的一个尝试中的解决方案更新一下。提示:似乎很好。参见更新小提琴。:.如果你想得到赏金,请随时更新你的答案。如果你想避免这个问题本身,你可以简单地使用基本分位数:FalseCentities,不管它是一个空格还是一个空格。我想要的是保留BR。没关系,我会根据你给我的罚单中给出的解决方法来回答
CKEDITOR.plugins.add('brangel', {
    init: function (editor) {
        editor.on('toHtml', function( evt ) {
            protectBRs(evt.data.dataValue);
        }, null, null, 5);
        editor.on('toHtml', function( evt ) {
            unprotectBRs(evt.data.dataValue);
        }, null, null, 14);
        editor.on('toDataFormat', function( evt ) {
            protectBRs(evt.data.dataValue);
        }, null, null, 5);
        editor.on('toDataFormat', function( evt ) {
            unprotectBRs(evt.data.dataValue);
        }, null, null, 14);

        function protectBRs(element) {
            var children = element.children;
            if (children) {
                for (var i = children.length; i--; ) {
                    var child = children[i];
                    if (child.name == "br") {
                        var placeholder = new CKEDITOR.htmlParser.text('{cke_br}');
                        placeholder.insertAfter(child);
                        child.remove();
                    } else {
                        protectBRs(child);
                    }
                }
            }
        }

        function unprotectBRs(element) {
            var children = element.children;
            if (children) {
                for (var i = children.length; i--; ) {
                    var child = children[i];
                    if (child instanceof CKEDITOR.htmlParser.text && child.value === "{cke_br}") {
                        var br = new CKEDITOR.htmlParser.element('br');
                        br.insertAfter(child);
                        child.remove();
                    } else {
                        unprotectBRs(child);
                    }
                }
            }
        }
    }
});