【Smarty】HTMLエスケープ処理を部分的に無効にする

環境: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とする。

Follow me!