カテゴリ: Symfony 更新日: 2025/11/15

TwigのHTMLエスケープとrawフィルタの使い方を完全解説!初心者にもわかるテンプレート表示のコツ

TwigでHTMLをエスケープ・非エスケープする方法(|raw)
TwigでHTMLをエスケープ・非エスケープする方法(|raw)

先生と生徒の会話形式で理解しよう

生徒

「SymfonyのTwigテンプレートで、HTMLがそのまま表示されず文字として出ちゃうんですけど、どうしたらいいですか?」

先生

「Twigでは、セキュリティのために自動でHTMLをエスケープして表示しているんですよ。」

生徒

「なるほど…でもHTMLとして表示したいときはどうしたらいいんですか?」

先生

「その場合は|rawというフィルタを使えば、HTMLがそのまま表示されるようになりますよ!」

1. Twigのエスケープとは?

1. Twigのエスケープとは?
1. Twigのエスケープとは?

SymfonyのテンプレートエンジンであるTwigでは、セキュリティの観点から、変数の中身をそのままHTMLに出力するときに自動的にエスケープされます。エスケープとは、「HTMLタグとして解釈されるのを防ぐために、安全な文字に置き換えること」です。

例えば、変数に<strong>重要</strong>という文字列が入っていたとしても、そのままでは画面上には以下のようにタグが文字として表示されてしまいます。


<strong>重要</strong>

これは、Twigが自動でHTMLをエスケープして表示しているからです。ユーザーが入力した危険なコードを表示しないための仕組みで、とても大切なセキュリティ対策です。

2. HTMLとして表示したいときは「|raw」

2. HTMLとして表示したいときは「|raw」
2. HTMLとして表示したいときは「|raw」

ただし、場合によってはHTMLタグとして表示したいこともあります。たとえば、太字や改行を表示したい場合ですね。そういったときは、Twigの|rawフィルタを使えばOKです。

使い方はとても簡単です。変数の出力に|rawをつけるだけで、その中のHTMLがエスケープされずそのまま出力されます。


{{ message|raw }}

例えば、コントローラから以下のようなHTMLを含んだ文字列を渡したとします。


// コントローラ(PHP)
$message = '<p>ようこそ!</p>';
return $this->render('sample.html.twig', [
    'message' => $message
]);

通常はエスケープされて、以下のように文字列のまま表示されます。


    <p>ようこそ!</p>

しかし、Twigで|rawをつけて表示すると、次のようにHTMLとして解釈されて表示されます。


    ようこそ!

3. |rawを使うときの注意点

3. |rawを使うときの注意点
3. |rawを使うときの注意点

|rawは便利ですが、絶対に注意しなければならない点があります。それは、「ユーザーが入力したデータには使わない」ということです。

もし、ユーザーがフォームなどで悪意あるスクリプト(例:<script>悪いコード</script>)を入力してしまった場合、それを|rawで表示してしまうと、クロスサイトスクリプティング(XSS)というセキュリティの脆弱性につながります。

そのため、|rawを使うのは、自分で用意した安全なHTMLだけにしましょう。

4. |rawを使った具体例

4. |rawを使った具体例
4. |rawを使った具体例

ここでは、HTML付きのメッセージを表示する簡単な例を見てみましょう。


// コントローラ(Controller)
$notice = '<p class="text-success">保存が完了しました!</p>';
return $this->render('page.html.twig', [
    'notice' => $notice
]);

Twigテンプレートでは次のように|rawを使います。


{{ notice|raw }}

表示結果は以下のようになります。


    保存が完了しました!(緑色で表示)

5. TwigとHTMLの関係を理解しよう

5. TwigとHTMLの関係を理解しよう
5. TwigとHTMLの関係を理解しよう

HTMLはウェブページを構成するための言語で、TwigテンプレートはそのHTMLをより動的に作るための仕組みです。Twigでは変数を簡単に表示できますが、セキュリティを守るために、表示される内容はHTMLとして解釈されず、文字列として安全に出力されます。

HTMLを意図的に表示したいときだけ、|rawを使い、その他はTwigの自動エスケープに任せるのがベストプラクティスです。

関連記事:
カテゴリの一覧へ
新着記事
New1
Laravel
Laravelの認証状態をチェックする方法を完全解説!authとAuth::check()を初心者向けにやさしく説明
New2
CodeIgniter
CodeIgniterのコントローラクラスの作り方を完全ガイド!初心者でもわかる基礎から実践まで
New3
Symfony
Symfonyのフォームラベルを多言語対応!初心者でもわかる翻訳設定ガイド
New4
Laravel
Laravelでユーザー登録機能を作る方法!初心者向けにバリデーションとリダイレクトをやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.2
Java&Spring記事人気No2
Laravel
Laravelのビューとは?Bladeテンプレートの基本を解説
No.3
Java&Spring記事人気No3
Laravel
Laravelでセッションを扱う方法!保存方法と利用例を解説
No.4
Java&Spring記事人気No4
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
No.5
Java&Spring記事人気No5
Laravel
Laravelでルーティングを設定する方法!web.phpと基本ルートの書き方を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.7
Java&Spring記事人気No7
Laravel
LaravelでルートをBladeテンプレートに記述する方法(route関数)
No.8
Java&Spring記事人気No8
Laravel
Laravelのルートキャッシュ機能を活用してパフォーマンス改善!初心者でもわかる完全ガイド