スタッフブログ
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)}>