0

我想在CDetailView以前以MarkDown格式编码的 a 中显示一些文本。

这是我的视图代码:

<?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;
    }

注意我是如何明确设置purifyOutputtrue.

所以我创建了一个充满诸如选框和注入javascript之类的模拟帖子,以查看它的行为方式,它根本没有过滤任何东西!我的脸上出现了警报,选框很高兴在页面上四处移动……

我找到了一种解决方法,可以设置'type'=>'html'CDetailView我不需要这样做,我应该吗?

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

请帮忙。

4

1 回答 1

1

要净化你需要使用的输出CMarkdown::processOutput,而不是transform方法(那个更底层并且不尊重purifyOutput)。

如果您仔细查看文档,您会注意到其中processOutput 提到purifyOutput设置,而transform 没有。查看源代码证实了这一点。

于 2012-04-09T11:01:03.293 回答