Laravel이 블레이드 템플릿의 모든 HTML을 이스케이프
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 태그를 이스케이프하는 대신 실행해야합니다.
구문을에서 {{ }}
로 변경하십시오 {!! !!}
.
The Alpha가 위의 주석에서 말했듯이 (답이 아니므로 게시 할 것이라고 생각했습니다) Laravel 5에서는 {{ }}
(이전에는 이스케이프되지 않은 출력 구문)이 {!! !!}
. 교체 {{ }}
로 {!! !!}
그것은 작동합니다.
이 태그 사용 {!! 설명 텍스트 !!}
{! !}.
나는 같은 문제가 있었다. 위의 답변에 감사 드리며 문제를 해결했습니다. 같은 문제에 직면 한 사람들이 있다면 다음 두 가지 방법으로 해결할 수 있습니다.
- 당신이 사용할 수있는
{!! $news->body !!}
- 다음과 같이 기존의 PHP 열기 (권장하지 않음)를 사용할 수 있습니다.
<?php echo $string ?>
도움이되기를 바랍니다.
블레이드 템플릿에 HTML 코드를 표시하는 데 문제가 없습니다.
테스트를 위해 route.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
I also don't know if Pages
is your model or it's a vendor model. For example it can have accessor inside:
public function getPageDescAttribute($value)
{
return htmlspecialchars($value);
}
and then when you get page_desc
attribute you will get modified page_desc
with htmlspecialchars
. So if you are sure that data in database is with raw html (not escaped) you should look at this Pages
class
{{html_entity_decode ($post->content())}} saved the issue for me with Laravel 4.0. Now My HTML content is interpreted as it should.
참고URL : https://stackoverflow.com/questions/26023823/laravel-escaping-all-html-in-blade-template
'program tip' 카테고리의 다른 글
사용자 지정 .php 파일에 WordPress 기능을 포함하는 방법은 무엇입니까? (0) | 2020.12.15 |
---|---|
암시 적으로 'string'형식을 'System.Threading.Tasks.Task로 변환 할 수 없습니다. (0) | 2020.12.14 |
누락 된 문자가있는 단어를 찾기위한 좋은 알고리즘 및 데이터 구조? (0) | 2020.12.14 |
SO_REUSEADDR (setsockopt 옵션)-Linux의 의미는 무엇입니까? (0) | 2020.12.14 |
JavaScript에서 새로 추가 된 요소에 onclick 이벤트 추가 (0) | 2020.12.14 |