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
);

この行を使用するtitle: '$model->name'と、次のように展開されます。

title: 'Some Name'

代わりにこの行を使用するtitle: '{${CHtml::encode($model->name)}}'と、次のように展開されます。

title: ''

CHtml::encode同じページの他の場所では問題なく動作しますが、phpヒアドキュメントでは動作しないようです。

  1. ブラウザにレンダリングされるJavaScript文字列データをHTMLエンコードする必要がありますか?
  2. ヒアドキュメントでCHtml::encodeを機能させるにはどうすればよいですか?
4

2 に答える 2

2
  1. データをエンコードする必要がありますが、CHtml::encode. HTML ではなく JavaScript に値を挿入しているため、代わりにCJSON::encodeorを使用する必要があります (誰でもできます)。CJavaScript::encode
  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 に答える