Php 我需要在TbDetailView中使用CHtml::encode吗?

Php 我需要在TbDetailView中使用CHtml::encode吗?,php,yii,yii-chtml,Php,Yii,Yii Chtml,我使用Yii作为PHP框架,当我需要显示数据库中的一些信息时,我总是使用CHtml::encode来提高安全性 我的问题是:当我在Yii小部件(如TbDetailView或TbGridView)上显示值时,是否需要执行相同的操作 例如,下面的代码是否需要CHtml::encode <?php $this->widget('bootstrap.widgets.TbDetailView',array( 'data'=>$model, 'attributes'=>array(

我使用Yii作为PHP框架,当我需要显示数据库中的一些信息时,我总是使用CHtml::encode来提高安全性

我的问题是:当我在Yii小部件(如TbDetailView或TbGridView)上显示值时,是否需要执行相同的操作

例如,下面的代码是否需要CHtml::encode

<?php $this->widget('bootstrap.widgets.TbDetailView',array(
'data'=>$model,
'attributes'=>array(
    'id',
    'nome',
    'descricao',
    'origem',
            array('label'=>'Tipo de Refeição', 'value'=>CHtml::encode($model->tipoRefeicao ? $model->tipoRefeicao->nome : '')),
            array('label'=>'Ativo', 'value'=>CHtml::encode($model->ativo ? 'Sim' : 'Não')),
),
)); ?>

该函数是PHP函数的包装器,它将特殊字符编码为HTML实体。某些字符在HTML中具有特殊意义,并且应该由HTML实体表示。如果要保留其含义,则需要执行转换

 - '&' (ampersand) becomes '&amp;'
 - '"' (double quote) becomes '&quot;' 
 - "'" (single quote) becomes '&#039;'   
 - '<' (less than) becomes '&lt;'    
 - '>' (greater than) becomes '&gt;'
-“&”(与号)变为“&;”
-“”(双引号)变为“”
-“'”(单引号)变为“';”
-''(大于)变成''

这意味着,如果DB中的字段可能包含这些字符中的任何一个,则必须对其进行编码,否则可能会破坏HTML输出,如果不会,则无需对其进行编码

谢谢您的回复@所以本质上你是说如果你不能信任信息,那么就对它进行编码。“信任”意味着它是安全的,编码不能保护你免受XSS或类似的攻击。我更愿意说,如果你不能控制/限制用户输入,那么就进行编码,例如,你允许在文本区域中设置html格式,比如说这个评论框。然后,您必须在它显示在UI中之前对其进行编码。否则,如果我在评论中添加两个像这样的结束div,它将完全破坏布局。那么,你能给我一个方向吗?我觉得这真的很有帮助,因为插入标签已经不起作用了