0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravelで改行表示をしつつ、セキュリティも確保する!nl2br(e(session('message')))の意味と使い方

Last updated at Posted at 2025-04-03

①session('message')とは?

Laravelでは、コントローラーなどでメッセージをセッションに保存できます:

return redirect()->route('index')->with('message', '投稿が完了しました!');

これをビュー側で受け取るには、以下のようにします:

{{ session('message') }}

ただし、これだけだと改行が反映されません。

②e()とは?

e($value)
  • Laravelが提供するHTMLエスケープ関数
  • ユーザー入力などに含まれるHTMLタグや特殊文字(<,>,"など)を安全に表示するために変換します。

例:

e('<script>alert("危険")</script>')
// =>&lt;script&gt;alert(&quot;危険&quot;)&lt;/script&gt;

-> XSS対策(クロスサイトスクリプティング防止)に必須の処理です。

③nl2br()とは?

nl2br($string)
  • PHPの標準関数
  • 文字列中の\n(改行)を
    タグに変換
    します
  • 改行をそのままHTMLで再現したいときに便利

例:

nl2br("こんにちは\n世界")
// => こんにちは<br>世界

④nl2br(e(...))の意味

nl2br(e(session('message')))という順番で書く理由は、以下の通り:

  • session ('message') でメッセージ文字列を取得
  • e () でHTMLタグや特殊文字をエスケープ(安全に)
  • nl2br () で\nを
    に変換(見た目を整える)

⑤{{}}ではなく{!! !!}を使う理由

LaravelのBladeでは:

  • {{ ... }} → HTMLエスケープされた文字列を表示
  • {{!! ... !!}} → HTMLをそのまま出力(XSSに注意)

今回、nl2br()によって
タグが入ってくるため、{{ }}だとエスケープされて
がただの文字列として表示されてしまいます。

→ よって、{{!! !!}}を使って「HTMLをそのまま出力」する必要があるのです。

ただし、e()でしっかりエスケープ済みなので安全です。

⑥まとめ: {!! nl2br(e(session('message'))) !!}の意味

IMG_7753.jpeg

⑦おまけ:使いどころ

  • お問い合わせフォームやコメント欄など、自由入力のテキストを画面に表示する時
  • 投稿完了メッセージなどを複数行に分けて表示したい時
  • Laravel + Bootstrap / Tailwind CSS と組み合わせる時にも活躍
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?