有时用户会从不同的来源复制粘贴文本到CKEditor中,但我想限制他们可以复制到CKEditor中的标签。
我只需要在CKEditor中使用特定的标签:列表标签、换行标签等等...
我能否定义它们并禁用CKEditor中的其他标签?
有时用户会从不同的来源复制粘贴文本到CKEditor中,但我想限制他们可以复制到CKEditor中的标签。
我只需要在CKEditor中使用特定的标签:列表标签、换行标签等等...
我能否定义它们并禁用CKEditor中的其他标签?
有一些设置可以使用。您可以通过编辑 ckeditor 根目录下的 config.js 文件来定义这些设置。例如,如果您想像我一样激进,您可以输入以下内容:
config.forcePasteAsPlainText = true;
config.removeFormatTags = 'b,big,code,del,dfn,em,font,i,ins,kbd';
只有当用户执行“删除格式”命令时,才会执行最后一个操作。
更多信息:http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.format_tags考虑到所有的时间,我认为你已经找到了答案,但其他人可能会受益。
我这样做是为了确保没有人能在编辑器中放置一个<input>
标签。它可能可以扩展到其他标签:
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;
},
}
});
});
我想补充一下,自从4.1版本以来,有了高级内容过滤器功能,它允许设置非常具体的规则来允许内容(什么标签、哪些样式/属性/类)。我发现这个功能非常强大,也很容易配置。
在http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter上阅读更多信息,但这里是该页面的几个示例:
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)";
我直接将有限的html标签应用于粘贴操作,使用了phpjs.org的strip_tags方法。
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 : '';
});
}
evt.data['html']
替换为 event.data.dataValue
。 - user570605CKEDITOR.config.fullPage = false
指示要编辑的内容是否作为完整的HTML页面输入。完整页面包括<html>
,<head>
和<body>
元素。最终输出也将反映此设置,仅在禁用此设置时包括<body>
内容。