環境:Smarty 3.1、PHP 7.4.4
Smartyで画面に出力する文字を※エスケープする機能を部分的にoffにする方法をメモします。
画面上で改行表示を有効にしたい場合や、メール本文のテンプレートを
Smartyで作成する場合に活用出来ます。
※クロスサイトスクリプティング(XSS)の対策として本来htmlのタグとして使用される文字を無効化し、
不正なアンカーリンクやスクリプトを埋め込まれないようにする事。
(サニタイズともいう)
「SmartyでHTMLエスケープ処理を有効化する設定」
$smarty->escape_html = true;
1. メール
メール本文中の全ての記号文字をエスケープしないようにする。
変数の後ろに、nofilter と記述する。
{$variable nofilter}
(注意) 画面に出力するテンプレートはこちらの設定を行わない事
2.改行を有効にする
(改行を表す、brタグのみエスケープの対象外とする)
テキストエリアで入力した値など、改行入力をそのまま表示させたい場合は以下のように記述する。
{{$variables}|nl2br nofilter}
変数を、もう一つ{}(デリミタ)構文で囲み、|(パイプ)nl2br nofilterとする。