【问题标题】:Laravel nl2br() with sending emailsLaravel nl2br() 与发送电子邮件
【发布时间】:2017-03-17 00:45:58
【问题描述】:

我正在使用Laravel 5.3,我正在尝试使用nl2br() 发送电子邮件。所以我使用Laravel 5.3 (vendor/notifications/email.blade.php) 中新增的默认email blade file

但它不显示换行符。只有这个:

sttesttesttesttesttesttesttesttesttesttesttesttest<br /> <br /> <br /> <br /> testtesttesttesttesttesttesttesttesttesttesttesttesttesttest

我是这样做的:

<!-- Outro -->
@foreach ($outroLines as $line)
    <p style="{{ $style['``'] }}">
        {{ nl2br($line) }}
    </p>
@endforeach

我做错了什么?

这个:

{!! nl2br(htmlspecialchars($line)) !!}

不工作。

【问题讨论】:

标签: php email blade laravel-5.3 nl2br


【解决方案1】:

Laravel 使用 {{ }}

自动转义你的字符串

对于 laravel 4+ 使用 {{{ nl2br($line) }}}

对于 laravel 5+ 使用 {!! nl2br($line) !!}

如果我对版本控制有误,请纠正我。

【讨论】:

  • 这不起作用,因为@Jamie 正在使用通知邮件通道。
【解决方案2】:

对于 Laravel 4 用户:

{{ nl2br(e($message)) }}

e($x) 等价于{{{ $x }}}

Laravel 5 用户:

{!! nl2br(e($message)) !!}

e($x) 等价于{{ $x }}

【讨论】:

  • Laravel 实际上在字符串进入 nl2br() 之前删除了所有新行符号。这是因为他正在使用通知邮件通道。
  • 这应该是最佳答案,非常适合我!
【解决方案3】:

我知道这有点晚了,但对于每个有同样问题的人来说。 如果您使用通知邮件,新行将不起作用(“\n”、“\r”、“\r\n”)。

这是因为 Laravel(对于 5.35.4 我可以确认)从行中删除了这些

供应商\laravel\framework\src\Illuminate\Notifications\Messages\SimpleMessage.php

protected function formatLine($line)
{
    if (is_array($line)) {
        return implode(' ', array_map('trim', $line));
    }

    return trim(implode(' ', array_map('trim', preg_split('/\\r\\n|\\r|\\n/', $line))));
}

我解决这个问题的方法是用实际的 html 新行 &lt;br&gt; 替换新行。

有很多更好的方法可以做到这一点我敢肯定,但重要的部分是不要忽视 formatLine 函数。

public function toMail($notifiable) {

    //Get your mail data
    $mail = new Email(2);
    $emailLine = $mail->getArray();

    return (new MailMessage)
        ->line(str_replace(array("\\r\\n", "\\n", "\\r","\r\n", "\n", "\r"), "<br>", $emailLine))

}

【讨论】:

  • 使用您的方法,我在电子邮件中收到:“来自房间 1 中 pod 1 的 light_3 为 0,超出范围 (3,14)。

    ***** *.

    ******.

    "
猜你喜欢
  • 1970-01-01
  • 2017-02-11
  • 2015-10-01
  • 2020-06-02
  • 1970-01-01
  • 2022-08-13
  • 1970-01-01
  • 2019-03-08
  • 2018-07-29
相关资源
最近更新 更多