35

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

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

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

4

5 回答 5

31

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

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

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

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

{{ $task->text }}

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


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

\Blade::setContentTags('{{{', '}}}');
\Blade::setEscapedContentTags('{{', '}}');
于 2015-02-17T19:59:57.193 回答
21

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

{!! nl2br(e($task->text)) !!}
于 2019-03-25T18:01:01.867 回答
4

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

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

感谢您提出这个问题。

于 2020-09-30T18:54:33.947 回答
1

如果你使用 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 版本。

于 2019-08-16T10:46:41.577 回答
0

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

<?php foreach (explode("\n", $text) as $line) { ?>
 {{$line}}<br />
<?php } ?>
于 2021-10-23T09:10:56.420 回答