如何在CKEditor中定义允许的标记?

如何在CKEditor中定义允许的标记?,ckeditor,Ckeditor,有时用户会将不同来源的文本复制并粘贴到CKEditor,但我想限制他们可以复制到CKEditor的标记 我只需要在CKEditor中使用某些标记:list标记、break标记等 我可以定义它们并禁用CKEditor中的其他标记吗 您可以使用一些设置。您可以通过编辑ckeditor根目录中的config.js文件来定义这些设置。例如,如果你想像我一样激进,你可以: config.forcePasteAsPlainText = true; 如果您想严格按照您所说的限制某些标记,我发现设置如下: c

有时用户会将不同来源的文本复制并粘贴到CKEditor,但我想限制他们可以复制到CKEditor的标记

  • 我只需要在CKEditor中使用某些标记:list标记、break标记等

  • 我可以定义它们并禁用CKEditor中的其他标记吗


  • 您可以使用一些设置。您可以通过编辑ckeditor根目录中的config.js文件来定义这些设置。例如,如果你想像我一样激进,你可以:

    config.forcePasteAsPlainText = true;
    
    如果您想严格按照您所说的限制某些标记,我发现设置如下:

    config.removeFormatTags = 'b,big,code,del,dfn,em,font,i,ins,kbd';
    
    仅当用户执行“删除格式”命令时,才会执行最后一个操作。 更多信息:


    考虑到所有的时间,我认为你已经找到了你的答案,但是其他人可以得到帮助。

    我这样做只是为了确保没有人可以在编辑器中放置
    标签。它可能会扩展到其他标记:

                CKEDITOR.on('instanceReady', function(ev)
                {
                    var editor = ev.editor;
                    var dataProcessor = editor.dataProcessor;
                    var htmlFilter = dataProcessor && dataProcessor.htmlFilter;
                    htmlFilter.addRules(
                    {
                        elements : 
                        {
                            input: function(element)
                            {
                                return false;
                            },
                        }
                    });
                });
    

    我使用phpjs.org中的方法将有限的html标记直接应用于粘贴操作

    CKEDITOR.on('instanceReady', function(ev) {
       ev.editor.on('paste', function(evt) {
          evt.data['html'] = strip_tags(evt.data['html'], 
             '<i><em><b><strong><blockquote><p><br><div><ul><li><ol>' // allowed list
          );
       });
    });
    
    function strip_tags (input, allowed) {
       // http://phpjs.org/functions/strip_tags (http://kevin.vanzonneveld.net)
       allowed = (((allowed || "") + "").toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join(''); // making sure the allowed arg is a string containing only tags in lowercase (<a><b><c>)
       var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi,
          commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
       return input.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) {
          return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
       });
    }
    
    CKEDITOR.on('instancerady',函数(ev){
    ev.editor.on('paste',函数(evt){
    evt.data['html']=strip_标记(evt.data['html'],
    “
    • ”//允许的列表 ); }); }); 功能条标签(输入,允许){ // http://phpjs.org/functions/strip_tags (http://kevin.vanzonneveld.net) allowed=((allowed | | |“”)+).toLowerCase().match(//g)| |[]).join(“”);//确保允许的参数是仅包含小写() 变量标记=/]*>/gi, commentsAndPhpTags=/|/gi; 返回输入。替换(commentsAndPhpTags.)。替换(标记,函数($0,$1){ 允许返回。indexOf(“”)>-1?$0:“”; }); }
    您可以使用在配置中定义允许和拒绝任何其他内容的元素和属性列表

    它基本上与Paul Tomblin提出的解决方案相同,但处理更多元素而不是复制大量代码应该更容易,并且它使用白名单而不是黑名单,因此任何不允许的内容都会被删除

    CKEDITOR.config.fullPage = false
    

    指示是否将要编辑的内容作为完整HTML页面输入。整个页面包括
    元素。最终输出也将反映此设置,仅当禁用此设置时,才包括
    内容

    要添加我的输入,从4.1开始就有高级内容过滤器功能,它允许对允许的内容使用非常具体的规则(哪些标记以及它们的样式/属性/类)。我发现它非常强大,配置起来也非常好

    阅读更多,但这里有一些例子从页面

    config.allowedContent = true; // to allow all
    
    // A rule accepting <p> and <h1> elements with optional "left" and "right" classes.
    // Note: Both elements may contain these classes, not only <h1>.
    config.allowedContent = "p h1(left,right)";
    
    // Rules allowing:
    // * <p> and <h1> elements with an optional "text-align" style,
    // * <a> with a required "href" attribute,
    // * <strong> and <em> elements,
    // * <p> with an optional "tip" class (so <p> element may contain
    //  a "text-align" style and a "tip" class at the same time).
    config.allowedContent = "p h1{text-align}; a[!href]; strong em; p(tip)";
    
    config.allowedContent=true;//通融
    //一种接受和具有可选“left”和“right”类的元素的规则。
    //注意:两个元素都可能包含这些类,而不仅仅是。
    config.allowedContent=“p h1(左、右)”;
    //允许:
    //*和具有可选“文本对齐”样式的元素,
    //*具有必需的“href”属性,
    //*和元素,
    //*带有可选的“tip”类(因此元素可能包含
    //“文本对齐”样式和“提示”类)。
    config.allowedContent=“p h1{text align};a[!href];strong em;p(提示)”;
    
    这里有更多信息:forcePasteAsPlainText并不总是有效的,请看作为开源插件提供插件的好处在于,您可以改进它,甚至可以花钱让别人做您需要的事情。即使用户拖放某些内容,输出仍将保持干净,因此这只是一个部分错误,我们可以说问题在于,CKEditor没有像粘贴那样挂钩拖放。是的,我想我还是会使用它,谢谢。至于修复它,看到这个ckeditor bug在“wontfix”关闭似乎并不容易。这是HTML的正则表达式解析吗?Tee-hee!天啊!可能是吗?地球上的罪恶。实际上,它是对HTML的剥离,而不是解析,这是regex非常适合的一个用途。对于ckeditor 4,将
    evt.data['HTML']
    替换为
    event.data。dataValue
    ckeditor 4有一个全新的(奇特的)过滤标记系统: