登録日:
2025-03-01
最終更新日:
2025-03-23
Laravel blade 内にHTMLを出力する方法
LaravelのBladeテンプレート内でHTMLを出力する方法はいくつかあります。
以下に代表的な方法を紹介します。
{!! !!} を使用する(エスケープなし)
Bladeでは、変数の出力時に{{ }}を使うとデフォルトでHTMLエスケープされますが、{!! !!} を使うことでエスケープせずにHTMLをそのまま出力できます。
{!! '<h1>こんにちは</h1>' !!}
出力結果
<h1>こんにちは</h1>
注意点
ユーザー入力を直接{!! !!}で出力すると、XSS(クロスサイトスクリプティング)攻撃のリスクがあるため、信頼できるデータのみを使用してください。
{{ }} を使用する(エスケープあり)
通常の{{ }}を使うと、HTMLはエスケープされるため、タグはそのまま表示されます。
{{ '<h1>こんにちは</h1>' }}
出力結果
<h1>こんにちは</h1>
@verbatim ディレクティブを使用する
Bladeのタグ{{ }}や@がそのままHTMLとして解釈されるようにするには、@verbatimを使います。
@verbatim
<div>
{{ これはBladeの影響を受けません }}
</div>
@endverbatim
出力結果
<div>
{{ これはBladeの影響を受けません }}
</div>
@php を使う
Blade内でPHPコードを実行し、その中で echo を使う方法もあります。
@php
echo '<h1>こんにちは</h1>';
@endphp
出力結果
<h1>こんにちは</h1>
ただし、通常は{!! !!}を使う方がシンプルです。
カスタムコンポーネントを作る
もしHTMLを頻繁に出力するなら、Bladeコンポーネントを作成するのもおすすめです。
例:resources/views/components/html-output.blade.php
<div>{!! $content !!}</div>
出力結果
<x-html-output :content="'<strong>太字</strong>'" />
まとめ
方法 | エスケープ | 主な用途 |
---|---|---|
{!! !!} | なし | 信頼できるHTMLを出力 |
{{ }} | あり | ユーザー入力などの出力 |
@verbatim | そのまま | Bladeの影響を受けたくない場合 |
@php | なし | PHPの直接記述 |
コンポーネント | 選択可 | 繰り返し使う場合 |