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

时间:2015-02-17 19:51:47

标签: blade laravel-5 nl2br

因此,我希望在使用刀片模板引擎时保留数据库中的换行符。我使用

提出了这个想法
{!! nl2br(e($task->text)) !!}

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

5 个答案:

答案 0 :(得分:25)

您可以定义自己的回声格式"将与常规内容标记 {{ ... }}一起使用。默认格式为e(%s)sprintf用于应用格式设置)

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

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

现在你可以使用普通的echo标签:

{{ $task->text }}

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


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

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

答案 1 :(得分:2)

适用于 Laravel 4 + Laravel 5 的简单方法。

{!! nl2br(e($map->getDescription())) !!}

答案 2 :(得分:1)

以下解决方案适用于 Laravel 5.7版本的刀片文件:

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

感谢您提出这个问题。

答案 3 :(得分:0)

如果您使用的是Eloquent,则更简洁的选择是Mutators。在您的Task模型上,创建如下方法:

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版本。

答案 4 :(得分:-4)

您可以简单地使用:

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

不需要添加e(...)。