74

我正在 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 标签而不是转义它们。

4

6 回答 6

176

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

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

于 2015-04-10T05:44:15.343 回答
17

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

于 2016-02-27T20:03:24.863 回答
9

我遇到过同样的问题。谢谢楼上的回答,我的问题解决了。如果有人面临同样的问题,这里有两种解决方法:

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

我希望它有所帮助。

于 2017-06-21T10:49:16.897 回答
8

将内容包含在{! <content> !}.

于 2016-01-02T14:30:16.070 回答
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_desc使用htmlspecialchars. 因此,如果您确定数据库中的数据是原始 html(未转义),您应该查看Pages此类

于 2014-09-24T18:52:03.550 回答
-4

{{html_entity_decode ($post->content())}} 用 Laravel 4.0 为我保存了这个问题。现在我的 HTML 内容被解释为它应该的。

于 2014-11-11T16:20:55.637 回答