Laravel在Blade模板中逃脱所有HTML

ktca8awb  于 2023-05-23  发布在  其他
关注(0)|答案(7)|浏览(134)

我正在Laravel中构建一个小型CMS,我试图显示内容(存储在DB中)。它显示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标记而不是转义它们。

guykilcj

guykilcj1#

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

y3bcpkx1

y3bcpkx12#

使用此标签{!! description text !!}

dohp0rv5

dohp0rv53#

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

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

希望能帮上忙。

uklbhaso

uklbhaso4#

包含{! <content> !}中的内容。

pb3s4cty

pb3s4cty5#

在刀片模板中显示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>

对于下面的代码,您将获得作为on image的输出

因此,在您的情况下,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

3bygqnnd

3bygqnnd6#

这在Laravel 10中对我很有效

{!! $blog->description !!}
w7t8yxp5

w7t8yxp57#

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

相关问题