2017-02-05 30 views
1

Laravel 5.4有一个新功能。您可以在邮件模板中使用Markdown。如何在Laravel中转义字符串5.4 Markdown邮件?

这里是我的邮箱刀模板:

# Message for you! 

Hello {{ $user->name }}, 

@foreach($messages as $message) 
{{ $message->text }} 
@endforeach 

Greetings 

我的问题是:中$message->text第一个字符可以是数字符号或散列),因此字符串被解析为标题...

更新:

可以逃避所有降价字符\https://meta.stackexchange.com/a/198231

我试图逃跑,此代码的所有字符:

$text = str_replace(
    ['\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '#', '+', '-', '.', '!'], 
    ['\\\\', '\`', '\*', '\_', '\{', '\}', '\[', '\]', '\(', '\)', '\#', '\+', '\-', '\.', '\!'], 
    $text 
); 

但我认为这不是推荐的方式...

我怎样才能逃避串?

问候

+0

我很高兴你找到了解决办法! 我认为你可以使用这个功能:http://php.net/manual/en/function.addcslashes.php – PreDinnerSnack

回答

1

好的,我找到了我的解决方案!您必须创建一个新的邮件组件...

首先,您必须从(https://laravel.com/docs/5.4/mail#customizing-the-components)发布来自laravel的电子邮件组件。现在您的resources/views中有一个vendor文件夹。

进入resources/views/mail/html并创建一个新的.blade.php文件。我的文件是这样的:

<table class="notification" align="center" width="100%" cellpadding="0" cellspacing="0"> 
    <tr> 
     <td class="notification-meta"> 
      {{ $time }} 
     </td> 
    </tr> 
    <tr> 
     <td class="notification-content"> 
      {{ $slot }} 
     </td> 
    </tr> 
</table> 

必须resources/views/markdown/html下创建同一文件的纯文本邮件。

如果你看看resources/views/mail/html/footer.blade.php你可以看到下面的函数模板:

{{ Illuminate\Mail\Markdown::parse($slot) }} 

此功能解析降价为HTML。我不使用我的模板中的功能。

现在我可以用我的组件在邮件中这样的:

# Message for you! 

Hello {{ $user->name }}, 

@component('mail::notification', ['time' => '06.02.2017' ]) 
{{ $text }} 
@endcomponent 

Greetings 

而且$text将不从降价解析为HTML :)

2

我不认为这是可能的逃脱刀片中的第一个字符。

一种可能的方法来解决,这可能是改变“#”与HTML数&#35;

在您的控制器如果该消息与#开始,你可以检查,取而代之的是&#35;

function replaceFirstChar($message) 
{ 
    if ($message[0] == "#") { 
     $new_message = '&#35' . substr($message, 1); 
     return $new_message; 
    } else { 
     return $message; 
    } 
} 

我认为这应该工作。

UPDATE

addcslashes($str , '\ `*[]()#+-.!'); 

这应该做的伎俩。 (可能你需要添加一些额外的字符)

+0

好的,谢谢,这是一个简单的解决方案,但我必须在字符串的任何位置转义所有降级字符。 我认为有一个函数或刀片语法可以避免解析markdown字符。 – poldixd

+0

我更新了答案。我认为这是你需要的。 – PreDinnerSnack

+0

谢谢!我找到了一个解决方案。看看它! – poldixd