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?
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?
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('{{', '}}');
Simple approach which works for Laravel 4 + Laravel 5.
{!! nl2br(e($task->text)) !!}
Below solution worked in blade file in Laravel 5.7 version for me:
{!! nl2br(e($contactusenquiry_message), false) !!}
Thanks to ask this question.
This is a way to do it while keeping everything safe.
Works on all Laravel versions: Laravel v4 - Laravel v10.
<?php foreach (explode("\n", $text) as $line) { ?>
{{$line}}<br />
<?php } ?>
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.
© 2022 - 2024 — McMap. All rights reserved.
e()
and what is that function? I can use{!! nl2br($var) !!}
nothing more needed. – Rhodes