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タグをエスケープする代わりに実行する必要があります。
構文を{{ }}
から{!! !!}
に変更します。
アルファが上記のコメントで述べたように(答えではないので投稿したいと思います)、Laravel 5では、{{ }}
(以前はエスケープされていなかった出力構文)が{!! !!}
に変更されました。 {{ }}
を{!! !!}
に置き換えれば、動作するはずです。
このタグを使用してください{!!説明テキスト!!}
コンテンツを{! !}.
同じ問題がありました。上記の回答をありがとう、問題を解決しました。同じ問題に直面している人がいる場合、これを解決する2つの方法があります。
{!! $news->body !!}
を使用できます<?php echo $string ?>
役に立てば幸いです。
ブレードテンプレートに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);
}
);
この場合、出力はまったく同じです
Edit2
Pages
があなたのモデルなのか、それがベンダーモデルなのかもわかりません。たとえば、内部にアクセサーを持つことができます:
public function getPageDescAttribute($value)
{
return htmlspecialchars($value);
}
page_desc
属性を取得すると、htmlspecialchars
で変更されたpage_desc
を取得します。したがって、データベース内のデータが生のhtml(エスケープされていない)であることが確実な場合は、このPages
クラスを調べる必要があります。