0

我正在尝试对一个字符串进行 html 编码,该字符串将用作谷歌地图中的工具提示。

$cs = Yii::app()->getClientScript();
$cs->registerScript('someID', <<<EOD
    function mapsetup() {
        //...        
        var marker = new google.maps.Marker({
            position: myLatlng,
            map: map,
            // works:
            title: '$model->name'
            // doesn't work:
            title: '{${CHtml::encode($model->name)}}'
            });
       // ...
    }
    mapsetup();
EOD
, CClientScript::POS_LOAD
);

如果我使用 line title: '$model->name',它会导致以下扩展:

title: 'Some Name'

如果我改为使用 line title: '{${CHtml::encode($model->name)}}',则会导致以下扩展:

title: ''

CHtml::encode在同一页面上的其他地方工作正常,但它似乎在 php heredoc 中不起作用。

  1. 我什至需要对将呈现给浏览器的 javascript 字符串数据进行 html 编码吗?
  2. 如何让 CHtml::encode 在 heredoc 中工作?
4

2 回答 2

2
  1. 您确实需要对数据进行编码,但不需要使用CHtml::encode. 您必须使用CJSON::encodeorCJavaScript::encode代替(任何人都会这样做),因为您将值注入 JavaScript,而不是 HTML。
  2. 你不能让它工作。只需预先计算您需要的值,将其存储在变量中并注入变量的内容。

例如:

$title = CJSON::encode($model->name);
$cs = Yii::app()->getClientScript();
$cs->registerScript('someID', <<<EOD
    function mapsetup() {
        //...        
        var marker = new google.maps.Marker({
            position: myLatlng,
            map: map,
            title: $title // no quotes! CJSON::encode added them already
            });
       // ...
    }
    mapsetup();
EOD
, CClientScript::POS_LOAD
);
于 2012-09-27T23:34:46.563 回答
1

这不是插值的正确用例,请参阅此http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing.complex。只需在之前对模型名称进行编码然后插入title:"$encodedName",1 行并不是很大的内存使用:)

于 2012-09-27T23:01:55.303 回答