スタッフブログ

  • 最新配信
  • RSS

NetCommon2の配列二重エスケープ問題

Ryuji : NetCommons 2013/12/5 17:45

Blogger's Avatar

NetCommons2はSmartyのdefault_modifiersを利用して自動で全変数にエスケープかかるようになってるが、これが罠。

このdefault_modifiesって表示だけでなく、変数を使うところ全てで適用されるので、下記の様なコードで問題になる。

<{foreach from=$arrayList item=item}>
    <{$item}>
<{/foreach}>

from=$arrayList で$arrayListの中身をSmarty::_run_mod_handlerでエスケープかけようします。

_rum_mod_handlerで、配列の中身すべてにdefault_modifiersで指定されたmodifireがかかります。

NetCommons2の場合、escapeです。さらに<{$item}>を表示するときにもdefault_modifiersで指定されたescapeがかかります。

結果、二重にエスケープされるわけです。

これを避けるにはsmarty:nodefaultsを利用してdefault_modifiersが適用されないように、下記の様なコードにします。

<{foreach from=$arrayList|smarty:nodefaults item=item}>
    <{$item}>
<{/foreach}>

Smartyのバグ ~default_modifiers~ : アシアルブログも参考にしたんですが、

<{if isset($foo)}>

みたいなときもエスケープかけようとするので、これも下記みたいにしないとダメなようです。

<{if isset($foo|smarty:nodefaults)}>

トラックバック

スタッフブログ最新
カテゴリ一覧

〒104-0061 東京都中央区銀座1丁目3番3号 G1ビル7階
お問い合わせ TEL 03-3524-8860

Copyright(c) 2012 RYUS.All Rights Reserved.