Laravel(5.2)Blade - 如何防止电子邮件地址中的Blade Directive被解析?

时间:2017-11-16 14:58:54

标签: laravel escaping render blade laravel-blade

更新这是Laravel 5.2& 5.3

我在这里有一个奇怪的。我们客户系统上的用户电子邮件地址有一个域,其中包含以下子字符串'@ parent'。我不是为了隐私而包括整个事情。

由于@parent是一个Blade指令,Laravel似乎要处理或忽略@parent并将其从页面上呈现的电子邮件地址中删除。

例如,假设电子邮件地址为john@parentstuff.com。 Laravel将在页面上呈现以下内容:johnstuff.com。了解它如何从电子邮件中删除@parent

我试图修复它:

1. {!! $user->email !!}

2. {{ e($user->email) }}

我知道这是Blade作为AJAX& amp;使用相同电子邮件地址的jQuery呈现内容在网站的其他位置显示得很好。

更新

经过进一步调查,似乎这可能是Blade处理@parent指令的一个错误。我为以下版本设置了3个新的Laravel项目:5.2,5.3和5.4。该项目是一个Laravel 5.2项目,仅供参考。

我为每个上述版本创建了以下设置来测试错误。

路线

Route::get('/test', function () {
    $foo = 'john@parentingstuff.org';

    return view('test')->with('foo', $foo);
});

模板

<html>
    <head>
        <title>App Name - @yield('title')</title>
    </head>
    <body>
        <div class="container">
            @yield('content')
        </div>
    </body>
</html>

测试视图

@extends('test-base')

@section('content')
    {{$foo}}
@endsection

输出

  • L5.2:johningstuff.org
  • L5.3:johningstuff.org
  • L5.4:john@parentingstuff.org

理论

我在运行这些测试时注意到的一个非常有趣的案例是,在@section指令中使用{{$ foo}}变量而在@section指令之外移动它导致了两个不同的输出。

实施例

{{$foo}}

@section('content')
    {{$foo}}
@endsection

这是......的输出。

  • john@parentingstuff.org
  • johningstuff.org

结论 那么,有没有人知道如何修补Laravel 5.2或Laravel 5.3中的这个错误?目前,升级到L5.4不是我们客户的选择。

任何人都有任何他们能想到的聪明伎俩可能会有所帮助吗?

4 个答案:

答案 0 :(得分:0)

我认为问题出在其他地方。你所做的事情可能比你写的要多。

示例控制器方法内容

return view('test', ['email' => 'john@parentstuff.com'];

示例视图:

Email is: {{ $email }}

结果是:

Email is: john@parentstuff.com

所以我相信你做的比你写的更多。

答案 1 :(得分:0)

您的设置中发生了一些非常棘手的事情,因为这不应该是可能的。 Laravel在解释任何变量之前处理刀片指令

我用一个非常简单的例子进行了测试:

Route::get('test', function() {
    $foo = 'john@parentstuff.com';

    return view('test')->with('foo', $foo);
});

和Blade模板:

{{ $foo }}

它工作得很好。 @parent未被解释。

答案 2 :(得分:0)

这是5.4之前的Laravel版本中的错误。请参阅以下内容:

答案 3 :(得分:0)

这也是Laravel 5.1中的一个错误。 快速解决方案可能是将 @ 符号更改为     java.rmi.server.codebase 解决它。