How do I use nl2br() in Laravel 5 Blade

You can define your own "echo format" that will be used with the regular content tags {{ ... }}. The default format is e(%s) (sprintf is used to apply the formatting)

To change that format call setEchoFormat() inside a service provider:

public function boot(){
    \Blade::setEchoFormat('nl2br(e(%s))');
}

Now you can just use the normal echo tags:

{{ $task->text }}

For echos you don't want nl2br() applied, use the triple brackets {{{ ... }}}


To switch the function of the brackets (triple and double) around, do this:

\Blade::setContentTags('{{{', '}}}');
\Blade::setEscapedContentTags('{{', '}}');

Below solution worked in blade file in Laravel 5.7 version for me:

{!! nl2br(e($contactusenquiry_message), false) !!}

Thanks to ask this question.


Simple approach which works for Laravel 4 + Laravel 5.

{!! nl2br(e($task->text)) !!}

A slightly cleaner alternative if you're using Eloquent is Mutators. On your Task model create a method like this:

public function getTextAttribute($value)
{
    return nl2br(e($value), false);
}

Now you can use {!! $task->text !!} and it will output the HTML correctly and securely. The good thing about this method is you can do all manner of conversions in the get...Attribute method, such as adding wrapper tags or using Markdown.

If you need access to both the raw data and HTML version you could replace the above with this:

public function getTextHtmlAttribute()
{
    return nl2br(e($this->text), false);
}

Then you would use {{ $task->text }} for the original and {!! $task->text_html !!} for the HTML version.