program tip

Laravel이 블레이드 템플릿의 모든 HTML을 이스케이프

radiobox 2020. 12. 14. 08:03
반응형

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>

다음 코드의 경우 이미지에 출력이 표시됩니다.

Output

따라서 아마도 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

반응형