Smarty3で$smarty->default_modifiers[] = ‘escape:”html”‘;指定時のnl2brの書き方

2月 14th, 2011

Smarty3で$smarty->default_modifiers[] = ‘escape:”html”‘;を指定した上で、
textareaから登録されたデータを画面表示させる際に、
textareaでの改行に合わせて<br />を出力させようとしたら、ちょっとハマったのでメモ。

入力されたデータ($textarea_data)は
「明日
晴れると
いいなぁ・・・」
とします。

{$textarea_data|nl2br}
とした時は
『明日<br /> 晴れると<br /> いいなぁ・・・ 』
と<br />までエスケープされて出力されます。

かと言って、
{$textarea_data|nl2br nofilter}
とした時は
『明日
晴れると
いいなぁ・・・ 』
と<br />がタグとして出力され見た目的にはOKなのですが、これだとtextarea内にJavaScriptが入れられた時にそのまま画面表示されてセキュリティホールになりかねません。
セキュリティに関しては「htmlspecialchars クロスサイトスクリプティング」でググッてください。

あれやこれや試した結果、
渡されたデータに対して、Smartyでescapeをかけた上で、nl2brを処理し、$smarty->default_modifiers[] = ‘escape:”html”‘;を無効にする。という流れが正しいようです。
テンプレート側での書き方は、
{$textarea_data|escape|nl2br nofilter}
です。

Smartyのver2なら{$textarea_data|nl2br}だけでOKだったんですけどねぃ・・・。

カテゴリー: PHP

Leave a comment

Leave a comment

コメントは承認待ちです。表示されるまでしばらく時間がかかるかもしれません。

Feed

http://blog.yume-dia.jp / Smarty3で$smarty->default_modifiers[] = ‘escape:”html”‘;指定時のnl2brの書き方