LoginSignup

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

laravelのbladeでユーザーが入力した{{}}をそのまま出力する方法

解決したいこと

laravelのbladeでユーザーが入力した{{}}をそのまま出力する方法を知りたいです。

例えばユーザーが
私は{{エンジニア}}ですという投稿(post)をした場合に
そのまま
私は{{エンジニア}}ですと表示したいです。

発生している問題

blade.php
{{$post}}

これはlaravelのbladeにおいてエスケープをする文字列なので
ユーザーが投稿した文字列の中で
{{}}があったら画面が真っ白になります。

試したこと

.php
{!! $post !!}

str_replaceによる置換処理
などなど

laravelで作っている全てのサービスに当てはまる内容かと思っており
何がご存じでしたら教えていただきたいです。

よろしくお願いいたします。

0

1Answer

変数のテキストの中に{{ }}が含まれていてもそのまま表示する、というのがゴールだと認識しています。

結論から言うと、特別なことをせずにそのまま{{ }}が表示されることを確認しました。
下記のような簡単なコードでそれを確認しています。(Laravel 10)

routes/web.php
Route::get('/hoge', function () {
    return view('hoge', ['text' => 'Hello {{World}}!']);
});
hoge.blade.php
{{ $text }}
出力結果
Hello {{World}}!

{{}}があったら画面が真っ白になります。

おそらく別の問題があるのではないかと思います。
エラーメッセージが表示されるよう、PHPのdisplay_errors設定を変更されてはいかがでしょうか?

3

Comments

  1. @Masataka_Sugia

    Questioner

    ご回答ありがとうございます。

    結論から言うと、特別なことをせずにそのまま{{ }}が表示されることを確認しました。

    動作確認の報告ありがとうございます。
    てっきりlaravelの仕様かと思っていましたがどうやらこちらに問題がありそうですね。

    ありがとうございます🙏

  2. @Masataka_Sugia

    Questioner

    @blue32a さん

    1つ分かったことがあったので報告です。

    bladeに

    hoge.blade.php
    {{$text}}
    

    これだけの場合は動くことを確認しました。

    しかし

    hoge.blade.php
    @extends('_layouts.layout')
    @section('content')
      {{$text}}
    @endsection
    
    

    このようにlayoutを継承した場合には
    動かなくなることを確認しました。

  3. このようにlayoutを継承した場合には
    動かなくなることを確認しました。

    残念ながら記載の情報だけでは判断が難しいです。
    まずエラーメッセージを確認するのがよいでしょう。
    画面に表示されない場合は、PHPのエラー表示に関する設定や、Laravelのデバックモード設定などを確認してみましょう。
    また、Laravelのログファイルにエラーメッセージが出力されていないでしょうか?

    bladeテンプレートに記載のコードについて、ひとつひとつ確認するのもよいと思います。
    @extends@section、セクションの中のコードについて段階的に実装していくことで問題となっている箇所を限定していくことができます。

Your answer might help someone💌