我在CakePHP 2.x中使用Ckeditor 3.1版
我可以让编辑器加载并替换textarea。 HTML将使用HTML格式标记保存到数据库中,如下所示:
<p>
<strong><p> This is a test</p> </strong></p>
当我将其插入CkEditor时,我会在编辑器界面中显示以下内容:
<p> <strong><p> This is a test</p> </strong></p>
如果我在设置CkEditor之前使用html_entity_decode,我会在编辑器界面中看到:
<p> <strong><p> This is a test</p> </strong></p>
这就是我在edit.ctp Cake视图中加载编辑器的方法:
$bio = $this->data['Club']['bio'];
echo $this->Cksource->ckeditor('Club.bio', array('value'=>$bio) );
如何强制CkEditor解析传入的HTML以使其格式化而不显示HTML标记?
编辑: 我手动覆盖了Cake Helper,以便输出的Javascript如下所示:
CKEDITOR.replace('data[Club][bio]',
{
entities: false,
basicEntities: false,
entities_greek: false,
entities_latin: false,
htmlDecodeOutput: true
}
);
我假设正在将相应的表单字段转换为ckeditor实例,因此第一个参数是正确的。我也尝试过没有运气更新config.js。
答案 0 :(得分:1)
CKEDITOR.replace(elemId,
{
entities: false,
basicEntities: false,
entities_greek: false,
entities_latin: false,
htmlDecodeOutput:true,
}
);
希望您已将此添加到您的代码中。否则请试试这个。
答案 1 :(得分:0)
谢谢Harry - 你帮忙完成了设置。我不得不调整Cake的东西来让Javascript看起来像你说的那样。
无论如何这里有一些对我有用的东西:
$bio = $this->data['Club']['bio'];
$bio = html_entity_decode($bio);
$bio = preg_replace( '/\s+/', ' ', $bio );
$events['instanceReady'] = "function (ev) {
console.log(ev.editor);
ev.editor.setData( '$bio' );
}";
echo $this->Cksource->ckeditor('Club.bio', array(
'value'=>$bio,
'config'=>array(
'entities'=>false,
'basicEntities'=>false,
'entities_greek'=>false,
'entities_latin'=>false,
'htmlDecodeOutput'=>false),
'events'=>$events
)
);
我认为在回显编辑器时没有必要把值放进去。
我在尝试使用setData(“意外的ILLEGAL标记”)时遇到了Javascript错误,这就是我删除多余空格的原因 - 这解决了这个问题。