我如何在 Laravel 5 Blade 中使用 nl2br()

How do I use nl2br() in Laravel 5 Blade

所以我想在使用 Blade 模板引擎时保留数据库中的换行符。我想出了这个主意

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

有效。但它看起来像是一个不必要的复杂解决方案。有没有更好的方法?

您可以定义自己的 "echo format",它将与常规 内容标签 {{ ... }} 一起使用。默认格式为 e(%s)sprintf 用于应用格式)

要在服务提供商内部更改格式调用 setEchoFormat()

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

现在你可以只使用普通的回显标签了:

{{ $task->text }}

对于您不想应用 nl2br() 的回声,请使用三括号 {{{ ... }}}


要切换括号(三重和双重)的功能,请执行以下操作:

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

适用于 Laravel 4 + Laravel 5.

的简单方法
{!! nl2br(e($task->text)) !!}

如果您使用 Eloquent,一个更简洁的替代方案是 Mutators。在您的任务模型上创建如下方法:

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

现在您可以使用{!! $task->text !!},它会正确安全地输出HTML。这种方法的好处是您可以在 get...Attribute 方法中进行各种转换,例如添加包装标签或使用 Markdown。

如果您需要访问原始数据和 HTML 版本,您可以将上面的替换为:

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

那么您将使用 {{ $task->text }} 作为原始版本,使用 {!! $task->text_html !!} 作为 HTML 版本。

以下解决方案适用于 Laravel 5.7 版本 中的 blade 文件对我来说:

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

感谢提问。

这是一种在确保一切安全的同时做到这一点的方法

<?php foreach (explode("\n", $text) as $line) { ?>
 {{$line}}<br />
<?php } ?>