【问题标题】:How do I use nl2br() in Laravel 5 Blade如何在 Laravel 5 Blade 中使用 nl2br()
【发布时间】:2015-04-18 15:32:58
【问题描述】:

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

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

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

【问题讨论】:

    标签: blade laravel-5 nl2br


    【解决方案1】:

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

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

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

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

    {{ $task->text }}
    

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


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

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

    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 这正是问题中写的内容:D
    • 是的,它仍然是无代码的解决方案。 =)比这里接受的答案更少的代码。接受的答案也不适用于 Laravel5。
    • 它有效 :) 谢谢!!
    【解决方案3】:

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

    【讨论】:

    • 应该可以,但您需要对每个模型重复此操作。但我认为这种方法有一些用途。
    • @jascha 是的,没错,但您通常只希望某些字段使用此功能,而不是所有内容。
    【解决方案4】:

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

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

    感谢您提出这个问题。

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-07
        • 2020-08-18
        • 2016-06-18
        • 2019-01-19
        • 2018-02-14
        • 2020-07-18
        • 2016-02-03
        • 2015-04-08
        相关资源
        最近更新 更多