0

Cakephpckeditorを使用しようとしていますが、ヘルパーを作成しました。問題は、CKeditor で改行を入力したり、チェックボックス (またはその他の html 要素) を追加したりすると、次にコンテンツを編集するときにエディターがクラッシュすることです。Firefox は次のエラーを返します。

SyntaxError: 終了していない文字列リテラル

}).setData("<p>test</p>以下のセクションのハイライト:

<script type="text/javascript">CKEDITOR.replace('data[Template][body]',{
            toolbar: '',
            toolbarGroups: '',
            width: 950,
            height: 500
    }).setData("<p>test</p>

<p>&nbsp;</p>

<p>test</p>");</script>

Cake ヘルパーのコードは次のとおりです。

$code = "CKEDITOR.replace('{$id}',{
            {$options['toolbar']},
            {$options['toolbarGroups']},
            width: {$options['width']},
            height: {$options['height']}
}).setData('" . trim($value). "');";

return $this->Javascript->codeBlock($code);

どんな助けでも大歓迎です。

4

1 に答える 1

2

これは、JavaScript 文字列内に改行があるためです。改行を HTML に「\n」として出力する必要があるため、HTML 出力は次のようになります。

<script type="text/javascript">CKEDITOR.replace('data[Template][body]',{
        toolbar: '',
        toolbarGroups: '',
        width: 950,
        height: 500
}).setData("<p>test</p>\n<p>&nbsp;</p>\n<p>test</p>");</script>

だからあなたのヘルパーの中で:

$out .= "}).setData('" .  str_replace("\n", '\n', $value). "');";

一重引用符を使用したので、改行の代わりに \n が出力されます。

または、次を使用できます。str_replace("\n", "\\n", $value)

于 2013-09-25T13:11:28.113 に答える