LaravelのBladeコンポーネントでテキストデータを改行させるには一工夫必要です。
前置き
例えば、以下のようにtextareaで改行付きテキストを登録したとします。
<div class="flex flex-col space-y-2">
@php($key = 'form.description')
<label for="{{ $key }}" class="font-bold text-lg">ギャラリー用説明文</label>
<x-forms.textarea id="{{ $key }}" wire:model.defer="{{ $key }}" />
@error($key)
<x-forms.message>{{ $message }}</x-forms.message>
@enderror
</div>
先程登録したデータを反映してみます。
<p class="text-sm text-gray-900 font-light px-6 py-4">{{ $image->description }}</p>
これでは改行は反映されません。
nl2br関数で改行できるじゃん!でも、できません😢
PHPにはnl2brという改行を反映させる関数があるので使ってみましょう。
<p class="text-sm text-gray-900 font-light px-6 py-4">
{!! nl2br($image->description) !!}
</p>
改行されません。。。
実はLaravelの二重括弧{{}}内の記述はエスケープされます。
そのため、改行タグ<br>はエスケープされ、そのまま反映されます。
{!! nl2br(e()) !!}で今度こそ改行できる!
{{}}は使わずに{!! nl2br(e()) !!}を使うことでテキストの改行を反映させることができます。
データ全体のエスケープはせず、e関数でデータのみをエスケープし、それに対してnl2br関数で改行を行うという流れになります。
<p class="text-sm text-gray-900 font-light px-6 py-4">
{!! nl2br(e($image->description)) !!}
</p>
各関数の詳細は以下の通りです。
関数 | 説明 |
---|---|
{!! !!} | エスケープさせずに値をechoする |
e() | htmlspecialcharsのLaravelヘルパー関数 |
nl2br() | テキストデータの改行を行う |