[symfony] HTMLタグを含む文字列をエスケープせずに出力する
symfonyでHTMLのタグを記述した文字列($this->str = '<p>文字列</p>'
みたいなの)を出力すると、view.ymlでの設定にもよるらしいけど'<'
や'>'
が実体参照(それぞれ'<'
や'>'
)に変換されて結局ブラウザには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年分) »
「プログラミング」カテゴリの記事
- 自分で書いたコードが大好き(2020.09.20)
- NPMのヨロコビ(2020.05.14)
- VanilaJS は必須科目(2019.02.25)
- MZ-700フルJavaScriptエミュレータ v1.0.6 をリリース(2019.01.26)
- 戦々恐々GitHub vs BitBucket(2019.01.08)
「php」カテゴリの記事
- ワレキでググってビビった件(2012.03.02)
- [php] PHPExcelで幅と高さを指定して画像を貼り付ける(2012.02.28)
- [php] 日付演算 DateTime/DateIntervalのうるう年対応(2012.02.24)
- Twitterアプリを試作してみた(2012.02.15)
- PHPで「なんちゃって静的URL」(2012.02.10)
« Google Maps Geocoding API V3 で動的ジオコーディングの制限と変換に失敗する住所の傾向と対策 | トップページ | SQLで月初めの日付を生成(1年分) »
コメント