74

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 タグをエスケープする代わりに実行する必要があります。

4

6 に答える 6

176

構文を から{{ }}に変更します{!! !!}

The Alpha が上記のコメントで述べたように (回答ではないので、投稿したいと思いました)、Laravel 5 では、{{ }}(以前はエスケープされていない出力構文) が に変更されました{!! !!}。に置き換える{{ }}{!! !!}、動作するはずです。

于 2015-04-10T05:44:15.343 に答える
17

このタグを使用{!! description text !!}

于 2016-02-27T20:03:24.863 に答える
8

にコンテンツを含めます{! <content> !}

于 2016-01-02T14:30:16.070 に答える
2

ブレード テンプレートで HTML コードを表示しても問題ありません。

テストのために、routes.php にルートを 1 つだけ追加できます。

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クラスを確認する必要があります。

于 2014-09-24T18:52:03.550 に答える