ckeditor - 不在文本区域中设置 HTML 数据


ckeditor - not setting html data inside textarea

我正在尝试将ckeditorcakephp一起使用,并且我编写了一个助手。问题是当我使用 CKeditor 输入一些换行符或添加复选框(或其他 html 元素)时,编辑器会在下次编辑内容时崩溃。Firefox 返回以下错误:

语法错误:未终止的字符串文本

并重点介绍以下部分中}).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>

这是蛋糕助手中的代码:

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

任何帮助将不胜感激。

这是因为 JavaScript 字符串中有换行符。您应该将换行符输出为 HTML 作为"'",以便您的 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). "');";

我使用了单引号,所以它会打印出'而不是换行符;

或者您可以使用:str_replace("'n", "''n", $value)