CkEditor - 如何将数据库中的html解析为格式

时间:2012-11-28 11:39:47

标签: php javascript ckeditor

我在CakePHP 2.x中使用Ckeditor 3.1版

我可以让编辑器加载并替换textarea。 HTML将使用HTML格式标记保存到数据库中,如下所示:

<p>
<strong>&lt;p&gt; This is a test&lt;/p&gt; </strong></p>

当我将其插入CkEditor时,我会在编辑器界面中显示以下内容:

<p> <strong>&lt;p&gt; This is a test&lt;/p&gt; </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。

2 个答案:

答案 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错误,这就是我删除多余空格的原因 - 这解决了这个问题。