Laravel在刀片模板中转义所有HTML


69

我在Laravel中建立了一个小型CMS,并试图显示其内容(存储在数据库中)。它显示的是HTML标记,而不是执行它们。就像所有打印数据都有自动html_entity_decode一样。

<?php

class CmsController extends BaseController
{
    public function Content($name)
    {    
        $data = Pages::where('CID', '=', Config::get('company.CID'))
            ->where('page_name', '=', $name)
            ->first();

        return View::make('cms.page')->with('content', $data);
    }
}

我试图使用花括号打印内容。

{{ $content->page_desc }}

和三重花括号。

{{{ $content->page_desc }}}

他们给出相同的结果。我需要执行这些HTML标记,而不是转义它们。


1
在最新版本中ver-5.0 {{...}}{{{...}}}这两个都正确吗?
Alpha 2014年

即时通讯使用版本4.2
Dr.Neo 2014年

然后我不确定为什么{{...}}会给出逃脱的结果!
Alpha

16
在中v-5{!! !!}用于普通输出(无esc)。
2014年

它们是作为“标签”存储还是已在数据库中转义?因为否则我会像Alpha一样看待它,这应该只在v5laravel中才是这种情况
theNaD

Answers:


160

将语法从更改{{ }}{!! !!}

正如Alpha在上面的评论(不是答案,所以我想我要发表)中说的那样,在Laravel 5中,{{ }}(以前未转义的输出语法)已更改为{!! !!}。替换{{ }}{!! !!},它应该可以工作。


解决我的情况!
fpauer

像魔术一样工作。谢谢!!虽然我不知道为什么html_entity_decode不起作用。
Alwaysalearner 2016年

14

使用这个标签 {!! description text !!}


这个答案在Laravel 5.2中对我有用。在解决问题的过程中,我还发现,htmlentities()如果您不使用以下语法,则Illuminate / Support / helpers.php :: 529可以运行{!! !!}
PapaHotelPapa

8

我遇到过同样的问题。感谢您以上的回答,我解决了我的问题。如果有人面临相同的问题,可以通过以下两种方法解决此问题:

  • 您可以使用 {!! $news->body !!}
  • 您可以使用传统的php开放(不推荐),例如: <?php echo $string ?>

希望对您有所帮助。



2

在刀片模板中显示HTML代码没有问题。

为了进行测试,您只能将一条路由添加到routes.php:

Route::get('/', function () {

        $data = new stdClass();
        $data->page_desc
            = '<strong>aaa</strong><em>bbb</em>
               <p>New paragaph</p><script>alert("Hello");</script>';

        return View::make('hello')->with('content', $data);
    }
);

并在hello.blade.php文件中:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>

{{ $content->page_desc }}

</body>
</html>

对于以下代码,您将获得与图像一样的输出

输出量

因此page_desc,您的情况可能不是您所期望的。但是如您所见,如果有人使用'`标签,则可能存在潜在的危险,因此您可能应该在分配给刀片模板过滤器之前使用某些标签

编辑

我还通过将相同的代码放入数据库进行了测试:

Route::get('/', function () {

        $data = User::where('id','=',1)->first();

        return View::make('hello')->with('content', $data);
    }
);

在这种情况下,输出完全相同

编辑2

我也不知道Pages是您的模型还是供应商模型。例如,它可以在内部具有访问器:

public function getPageDescAttribute($value)
{
    return htmlspecialchars($value);
}

然后当你page_desc的属性,你会得到修正page_deschtmlspecialchars。所以,如果你确信在数据库中的数据是原始的HTML(没有逃脱),你应该看看这个Pages


现在进行测试谢谢
Dr.Neo

-3

{{html_entity_decode($ post-> content())}}使用Laravel 4.0为我解决了这个问题。现在,我的HTML内容已得到应有的解释。


是的,此解决方案实际上适用于laravel 4-也许有人知道L4的更好解决方案?
KamilKiełczewski17年

由于我们使用的是laravel,因此我们应该使用{!! !!}遵循Laravel语法。
尼克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.