【问题标题】:Process blade templates inside strings在字符串中处理刀片模板
【发布时间】:2017-03-13 14:43:33
【问题描述】:

我有一个场景,用户可以设置文本模板并在大括号中使用占位符,应该动态替换。

例如,用户输入可以是如下字符串:

$userinput = '<p> Hello {{$name}} <\p>';
$userinput = '<p> Hi {{$name}} <\p>';

我想在视图 message.blade.php 中显示此输入和展开的占位符

@section('content')
    {!! $userinput !!}
@stop

HTML 被正确渲染,但当然 {{$name}} 不会被 'Alice' 替换。

view('message')->with([
            'userinput' => $userinput,
            'name' => 'Alice',]);

是否也有一种简单的方法来处理内部占位符?我可以再次解释刀片文件吗?

PS:我知道,未转义的用户输入是邪恶的。

【问题讨论】:

  • 你试过dd()吗?您是否检查过您是否收到 name 的任何值?你也试过用 {{$var}} 代替 {!!$var!!}
  • $userinput = '&lt;p&gt; Hello '.$name.' &lt;/p&gt;'; 会工作,不是吗?如果您在Controller 中定义$userinput,则不需要使用blade 简写。
  • 如果您在
  • 赋予用户执行任意代码的能力(即使是通过刀片)似乎是个坏主意,如果你必须这样做,你可以这样做\Blade::compileString($userinput)
  • 你可以使用这个包来渲染带有刀片的字符串模板:github.com/TerrePorter/StringBladeCompiler

标签: php laravel variables blade braces


【解决方案1】:

你可以改变: $userinput = '&lt;p&gt; Hello {{$name}} &lt;\p&gt;'; 对于$userinput = '&lt;p&gt; Hello {!! $name !!} &lt;\p&gt;'; 这将在渲染之前对序列进行 scape。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-20
    • 2013-02-07
    • 1970-01-01
    • 2014-05-04
    • 2014-01-03
    • 2014-03-01
    • 2016-11-10
    • 1970-01-01
    相关资源
    最近更新 更多