首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Laravel5.4标记邮件中转义字符串?

如何在Laravel5.4标记邮件中转义字符串?
EN

Stack Overflow用户
提问于 2017-02-05 19:16:27
回答 2查看 2.7K关注 0票数 1

Laravel5.4有一个新的特性。您可以在邮件模板中使用Markdown。

这是我的邮件刀片模板:

代码语言:javascript
复制
# Message for you!

Hello {{ $user->name }},

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

Greetings

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

更新:

您可以用* (https://meta.stackexchange.com/a/198231)转义所有标记字符。

我尝试用以下代码来转义所有字符:

代码语言:javascript
复制
$text = str_replace(
    ['\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '#', '+', '-', '.', '!'],
    ['\\\\', '\`', '\*', '\_', '\{', '\}', '\[', '\]', '\(', '\)', '\#', '\+', '\-', '\.', '\!'],
    $text
);

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

我怎么才能逃脱绳子?

问候

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-06 15:44:40

好吧,我找到解决办法了!你必须创建一个新的邮件组件..。

首先,您必须使用php artisan vendor:publish --tag=laravel-mail (https://laravel.com/docs/5.4/mail#customizing-the-components)从laravel发布电子邮件组件。现在,您的vendor文件夹在您的resources/views中。

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

代码语言:javascript
复制
<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,可以在模板中看到以下函数:

代码语言:javascript
复制
{{ Illuminate\Mail\Markdown::parse($slot) }}

此函数将标记解析为html。我不使用模板中的函数。

现在,我可以在邮件中使用我的组件,例如:

代码语言:javascript
复制
# Message for you!

Hello {{ $user->name }},

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

Greetings

并且$text将不会从标记解析为html :)

票数 1
EN

Stack Overflow用户

发布于 2017-02-06 13:21:47

我不认为能逃过刀刃里的第一个角色。

解决这一问题的一种可能方法是用html数字&#35;更改“#”

在控制器中,您可以检查消息是否以#开头,并将其替换为&#35;

代码语言:javascript
复制
function replaceFirstChar($message)
{
    if ($message[0] == "#") {
        $new_message = '&#35' . substr($message, 1);
        return $new_message;
    } else {
        return $message;
    }
}

我觉得这个应该管用。

更新

代码语言:javascript
复制
addcslashes($str , '\ `*[]()#+-.!');

这应该能起作用。(可能需要添加一些额外的字符)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42056148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档