关于Yii CMarkdown Class

时间:2012-04-09 03:48:41

标签: php yii markdown

我想在CDetailView中显示以前以 MarkDown 格式编码的文字。

这是我的观看代码:

<?php 
$this->widget('zii.widgets.CDetailView', array(
'data'=>$model,
'attributes'=>array(
    'title',
    array(
                'name'=>'text',
                'type'=>'raw',
                'value'=>$this->markdown->transform($model->text)
            ),
    'author_id',
    'date_added',
),
)); 
?>
在我的控制器中

,我实例化CMarkDown过滤器,如下所示:

    private $_markdown = null;

    public function getMarkdown()
    {
            if ( $this->_markdown === null)
            {
                    $this->_markdown = new CMarkdown();
                    $this->_markdown->purifyOutput = true;
            }
            return $this->_markdown;
    }

注意我如何将purifyOutput明确设置为true

所以我创建了一个模拟帖子,里面装满了像marquee这样的东西,并注入了javascript来查看它的行为方式,它根本没有过滤任何东西!我的脸上有一个警报,那个大帐篷很高兴在页面上移动......

我找到了一个解决方法,即在'type'=>'html'中设置CDetailView,但我不应该这样做,我应该吗?

当我调用purifyOutput方法时,是不是->transform()选项应该为我过滤掉不需要的东西?

请帮助。

1 个答案:

答案 0 :(得分:1)

要净化输出,您需要使用CMarkdown::processOutput,而不是transform方法(一个更低级别且不尊重purifyOutput)。

如果仔细查看文档,在processOutput mentions时,您会注意到purifyOutput does not transform设置。查看来源确认了这一点。