Smarty3でnl2brしつつXSSを避ける書き方をみて、なるほどって思ったので、どういう風に自己解釈したのか書く。
書いたコード
確認で、こんな感じのコードを書いた。
index.php
<?php
$smarty = new Smarty();
$smarty->default_modifier = ['escape'];
$smarty->assign('a', '<h1>title</h1>
this is summary
');
$smarty->display('index.tpl');
{{$a}|nl2br nofilter}
{*
1. $a with default_modifire
2. nl2br whithout default_modifier
*}
- 内側から処理されるっぽい。
- まず、
{$a}
を処理する。- このとき、
nofilter
はないので、普通にdefault_modifier
が適用される。 - 結果、
<h1>
とかはエスケープされる。
- このとき、
- 次に、
nl2br
される。- この結果に対しては、
nofilter
が指定されているので、エスケープされない。 - 結果、改行コードは
<br />
に置換される。
- この結果に対しては、