【发布时间】:2015-04-18 15:32:58
【问题描述】:
所以我想在使用 Blade 模板引擎时保留数据库中的换行符。我想到了使用
{!! nl2br(e($task->text)) !!}
它有效。但它看起来像是一个不必要的复杂解决方案。有没有更好的办法?
【问题讨论】:
所以我想在使用 Blade 模板引擎时保留数据库中的换行符。我想到了使用
{!! nl2br(e($task->text)) !!}
它有效。但它看起来像是一个不必要的复杂解决方案。有没有更好的办法?
【问题讨论】:
您可以定义自己的“回显格式”,用于常规的内容标签{{ ... }}。默认格式为e(%s)(sprintf 用于应用格式)
要更改该格式,请在服务提供者内部调用 setEchoFormat():
public function boot(){
\Blade::setEchoFormat('nl2br(e(%s))');
}
现在你可以使用普通的 echo 标签了:
{{ $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 版本的刀片文件:
{!! nl2br(e($contactusenquiry_message), false) !!}
感谢您提出这个问题。
【讨论】:
这是一种在确保一切安全的同时做到这一点的方法
<?php foreach (explode("\n", $text) as $line) { ?>
{{$line}}<br />
<?php } ?>
【讨论】: