2016-09-30 9 views
2

プロジェクトではCKEditorを使用しています。最近バージョンを3.Xから4.xにアップグレードしました。更新後、保存された古い文書には<img>タグが表示されません。ソースをクリックすると、<p><img ......><p>の代わりにHTMLが正しくない場合、Ckeditor 4は<img>タグを削除しています。この動作を停止する方法

<p>&nbsp;<p>が表示されます。

さらにデバッグすると、<img>タグを持つ多くのドキュメントが<img /="/" src="/folder/11801321/112267100.neck.png" height="308" width="467">のような<img>タグのジャンク属性を持っていることがわかりました。

ジャンクとは、この部分のタグ/="/"を意味します。これはユーザーの入力を処理している間に発生したバグです。我々は古いCKEditorバージョンを3.Xに戻し、エディタは内部的にジャンク値を処理していました。それはそれをトリミングしていた。ユーザーは不平を言うことはありませんでした。

しかし、CKEditor 4は同じようにHTMLを処理していません。実際には<img>というタグ全体が削除されています。

この問題を解決する方法は2つあります。 1.すべての文書の迷惑な文字を削除します。これは膨大なデータです。それを行うには、ユーザーからの承認が必要です。 2. CKEditor 4の設定を変更して、CKEditor 3.Xと同じ動作にします。

私はポイント2を賛成しています。私は検索していて、いくつかの設定を試しましたが、それを釘付けすることはできませんでした。

誰かが同じ問題に直面して解決した場合は教えてください。

+0

それを削除している必要があります。このコンフィグ設定を追加:

あなたはこのjsfiddleを確認することができます。正しい? 'config.disallowedContent = 'img [=]'; ' –

答えて

1

あなたは本当にあなたが「保護された」としてimgタグとエディタは、このコードを削除しません。この方法で内部のすべてのコードを設定することができますしたい場合:

CKEDITOR.config.protectedSource.push(/<img \/="\/" .*?>/g) 
  1. あなたの最終的なHTMLはならないことを覚えておいてください有効です。
  2. コードのその部分が「保護されている」ため、これらの画像はエディタに表示されません。ここで

そのための実施例である:
https://jsfiddle.net/oLb4Lmdb/

しかし - 私は実際にCKEditorバージョンのインスタンスが作成されると、それはソースに<imgで文字列<img \/="\/"を置き換えるために最善だろうと思う:

CKEDITOR.instances.editor1.on('instanceReady', function() { 
    this.setData(this.getData().replace("<img /=\"/\"", "<img")) 
}) 

この方法では、「バックラウンド」内のすべてのデータを調べる必要はなく、編集する必要があるすべてのドキュメントに対して「オンザフライ」で置き換えられます。
https://jsfiddle.net/k1ewc29p/

+0

解決に感謝します。バックエンド(私の場合はPerl)で同様のアプローチを実装し、正規表現を使用してこのジャンク文字を削除しました。 –

関連する問題