2

画像のアップロードと保存にUploadcareを使用していますが、これは機能しています。

ただし、CKEditor 4.1.1 はこれらの画像を窒息させているようです。

CKEditor による画像の追加。

画像の最初の配置は予想どおりです。ただし、データが保存されると、データをコミットする前に、CKEditor が明らかに奇妙なことを行っています。

いくつかのテストでは、HTML の書式設定と再配置中に、CKEditor は「スタイル」画像属性と最初の二重引用符を削除しています。これは、データベース自体のテキスト データで確認できます。

この動作は完全に再現可能です。

CKEditor による画像の編集。

最初は、画像は問題ないように見えます。しかし、ソースを表示すると、画像の HTML がサニタイズされてテキストとして表示され、画像オブジェクトとして表示されません。

サードパーティのプラグインを無効にします。

前述のように、Word Count と Char Count に加えて、Uploadcare を使用しています。両方のプラグインを無効にしましたが、何も変わりませんでした。

考え。

保存プロセス中に、CodeIgniter の $this->db->e​​scape() 関数を使用してデータをクレンジングするだけで、回避できません。そうしないと、データがコミットされず、エラーが発生します。

明確にするために、テスト中に、どのタイプの画像オブジェクトでもエラーが発生しました。手動で追加するか、Uploadcare を介して追加します。

私のビューページには、次のものがあります。

<script type="text/javascript">
    CKEDITOR.replace('note', {
        allowedContent: true
    });
</script>

ドキュメントによると、これは「フィルターを無効にします(データはフィルターされず、すべての機能がアクティブになります)」。

ただし、機能せず、以前とまったく同じです。スタイル属性を名前で取り除き、HTML を通常の同等のテキストに変換します。

何かを具体的に定義することを選択した場合、それはプラグインを含むほとんどすべてをオフにし、奇妙なことに、私がルールを書いたものそのものをオフにします。

<script type="text/javascript">
    CKEDITOR.replace('note', {
        allowedContent: {
            'img': {
                styles: 'height, width'
            }
        }
    });
</script>

だから私は何が起こっているのか分かりません。

また、誰かが私とまったく同じ問題を経験しているフォーラムのスレッドでアドバイスを試しましたが、どちらの方法も機能しないため、これは CKEditor 自体に固有の問題であり、データの処理ではないと思います。それ自体で。

CKEditor を誘導して画像を処理する方法について誰かアドバイスがあれば、喜んでアドバイスします。

4

2 に答える 2

2
  1. 99.9% に設定allowedContent: trueすると、CKEditor による画像の削除が正しく行われた場合に停止します。
  2. あなたのallowedContent設定 (2 番目のコード サンプル) が正しくありません。属性を許可srcしません。altない画像srcは、CKEditor によって無効として削除されます。したがって、少なくとも次のものが必要です。

    allowedContent: {
        img: {
           attributes: '!src, alt', // src is required
           styles: 'height, width'
        }
    }
    
  3. つまり、ポイント 1. または 2. がうまくいくはずです。したがって、サーバーが何かを壊すという2番目の問題があると思います。
于 2013-05-30T10:43:45.203 に答える
0

ここでの問題 (allowedContent: true または適切に設定されたルールが必要なことに加えて) は、CodeIgniter の XSS フィルタリングです。$_POST (または $_GET/$_REQUEST) にアクセスする前に、CI は既にこのデータに対してフィルター処理を実行しており、この場合はそれを台無しにしています。この設定は、コントローラーがロードされる前に既に実行されているため、コントローラーごとにオーバーライドすることはできません。

したがって、/application/config/ config.phpで完全に無効にすることができます(推奨されません) 。

$config['global_xss_filtering'] = FALSE;

または、あまり手間のかからないアプローチ (まだ理想的ではありません) で、特定のページで手動で無効にします (つまり、私の例では、/admin/help の下のすべてのページで無効にします)。/application/config/config.phpにもあります。

$config['global_xss_filtering'] = TRUE;

# Override the XSS filtering on /admin/help
if (preg_match("/^\/admin\/help/", $_SERVER["QUERY_STRING"])) {
    $config['global_xss_filtering'] = FALSE;
}

私はあなたが抱えていた正確な問題を抱えていましたが、これで問題が解決しました.

于 2014-11-23T22:09:36.380 に答える