« Google Maps Geocoding API V3 で動的ジオコーディングの制限と変換に失敗する住所の傾向と対策 | トップページ | SQLで月初めの日付を生成(1年分) »

2012.02.01

[symfony] HTMLタグを含む文字列をエスケープせずに出力する

symfonyでHTMLのタグを記述した文字列($this->str = '<p>文字列</p>'みたいなの)を出力すると、view.ymlでの設定にもよるらしいけど'<''>'が実体参照(それぞれ'&lt;''&gt;')に変換されて結局ブラウザにはHTMLコードがそのまま表示されてしまうんですよね(実は本日知りましたw)

赤い文字を表示したいと思って、以下のようにしてもダメなのね。

//アクション:actions.class.php

public function executeAction(
    sfWebRequest $request)
{
  $this->str =
    '<p style="color:red;">'.
      '文字列</p>';
}
//テンプレート actionSuccess.php
<?= $str ?>
<?php echo $str;?>

これを意図する通り表示させたいなら、テンプレート側で以下のようにすれば良いらしい。

//テンプレート actionSuccess.php
<?= $sf_data->get(
    'str', ESC_RAW) ?>
 

?。いやマジでなんのこっちゃと思いますけど、こうなのだから仕方がない。

通常、アクション側で$this->hogehogeとして使用された変数は、テンプレート側で単に $hogehoge と表記しますけど、果たしてその実体は?というと$sf_data->get('hogehoge')ということなんでしょうな(自信ないけどw)。そして、このgetメソッドは文字列をエスケープして返してくるけど、第二引数にESC_RAWという定数を与えるとエスケープしないってことなのだろうね。と推測した。

が、それだけでは説明が付かない事態。自作のクラスのgetterからHTMLを出力する場合もエスケープされてしまう。困った。

//HogeHogeは自作クラス
$obj = new HogeHoge();
echo $obj->getHtmlString();

これはどう対処するのかというと、、、
↓こうするんだって。

//HogeHogeは自作クラス
$obj = new HogeHoge();
echo $obj->getHtmlString(ESC_RAW);

驚いた。HogeHogeは自作クラスだから、getHtmlStringというメソッドも自作。引数は取らないように宣言しているのに、無理やり身に覚えのないESC_RAWを渡すと、エスケープ無しで返してくれる。つまりsymfonyさんが勝手にいろいろやってくれているんですね。

まさか使い始めて半年経ってこういうことを知る羽目になるとは、symfonyって深いなー。というか変態的だなw
こんなの知らなきゃわからないね。

アンジャッシュのネタが中国にぱくられるとかw。あのダブルミーニング的なネタは中国人でなくてもパクリたくなる気持ちはわかる。

« Google Maps Geocoding API V3 で動的ジオコーディングの制限と変換に失敗する住所の傾向と対策 | トップページ | SQLで月初めの日付を生成(1年分) »

プログラミング」カテゴリの記事

php」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: [symfony] HTMLタグを含む文字列をエスケープせずに出力する:

« Google Maps Geocoding API V3 で動的ジオコーディングの制限と変換に失敗する住所の傾向と対策 | トップページ | SQLで月初めの日付を生成(1年分) »

2019年5月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
フォト

Google AdSense

銀の弾丸

無料ブログはココログ

他のアカウント