0

以前にMarkDown形式CDetailViewでエンコードされたテキストを表示したいと考えています。

これは私のビューコードです:

<?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ください。

そこで、マーキーや注入されたJavaScriptなどでいっぱいのモック投稿を作成して、それがどのように動作するかを確認しましたが、何もフィルタリングしませんでした!! 顔にアラートが表示され、マーキーはページ上を動き回って喜んでいました....

に設定する回避策を見つけましたが'type'=>'html'CDetailViewそれを行う必要はないはずです??

そのpurifyOutputオプションは、メソッドを呼び出すときに不要なものを除外することになっていません->transform()か??

助けてください。

4

1 に答える 1

1

CMarkdown::processOutput出力を浄化するには、メソッドではなく、を使用する必要がありますtransform(メソッドはより低レベルであり、尊重されませんpurifyOutput)。

ドキュメントを注意深く見ると、設定について言及しているのにprocessOutput 言及していないことに気付くでしょう。ソースを表示すると、これを確認できます。purifyOutputtransform

于 2012-04-09T11:01:03.293 に答える