How do I use nl2br() in Laravel 5 Blade

jascha picture jascha · Feb 17, 2015 · Viewed 24.8k times · Source

So I want to keep linebreaks from the database while using the Blade Template Engine. I came up on the idea using

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

It works. But it looks like a needlessly complicated solution. Is there a better way?

Answer

lukasgeiter picture lukasgeiter · Feb 17, 2015

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('{{', '}}');