時々、ユーザーはテキストを異なるソースからCKEditorにコピーアンドペーストしますが、CKEditorにコピーできるタグを制限したいと思います。
CKEditorで特定のタグのみを使用する必要があります:リストタグ、ブレークタグなど...
それらを定義してCKEditorの他のタグを無効にできますか?
使用できる設定がいくつかあります。これらの設定は、ckeditorのルートディレクトリにあるconfig.jsファイルを編集して定義します。たとえば、私のように急進的になりたい場合は、次のように記述できます。
config.forcePasteAsPlainText = true;
あなたが言ったように特定のタグのみを制限したい場合、私は以下の設定を見つけました:
config.removeFormatTags = 'b,big,code,del,dfn,em,font,i,ins,kbd';
最後は、ユーザーが「remove format」コマンドを実行したときにのみ行われます。詳細情報: 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;
},
}
});
});
whitelist plugin を使用して、許可されている要素と属性のリストを構成に定義し、それ以外のものを拒否できます。
基本的には、Paul Tomblinが提示したのと同じソリューションですが、大量のコードをコピーする代わりに、より多くの要素を処理する方が簡単であり、ブラックリストの代わりにホワイトリストを使用することで、許可されていないものはすべて削除されます。
私の入力を追加するために、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)";
Phpjs.orgの strip_tags メソッドを使用して、限定された選択の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.config.fullPage = false
編集するコンテンツが完全なHTMLページとして入力されているかどうかを示します。ページ全体には、<html>
、<head>
、および<body>
要素が含まれます。最終的な出力には、この設定が無効になっている場合にのみ、<body>
の内容を含むこの設定も反映されます。