source

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

factcode 2022. 11. 5. 08:58
반응형

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

저는 라라벨에 작은 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가 위의 코멘트에서 말했듯이 (답변이 아니라 글을 올리려고 생각했다), Larabel 5에서,{{ }}(이전에는 비표준 출력 구문)이 로 변경되었습니다.{!! !!}.교체하다{{ }}와 함께{!! !!}효과가 있을 거야

이 태그를 사용하다{!! description text !!}

저도 같은 문제가 있었어요.위의 답변에 감사드리며 문제를 해결했습니다.같은 문제에 직면한 사람이 있는 경우는, 다음의 2개의 방법으로 해결할 수 있습니다.

  • 사용할 수 있습니다.{!! $news->body !!}
  • 다음과 같이 기존의 php 오픈(권장하지 않음)을 사용할 수 있습니다.<?php echo $string ?>

도움이 됐으면 좋겠어요.

콘텐츠를 에 포함{! <content> !}.

블레이드 템플릿에 HTML 코드를 표시해도 문제가 없습니다.

테스트용으로 루트에 추가할 수 있습니다.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_desc와 함께htmlspecialchars데이터베이스 내의 데이터가 raw html(스케이프되지 않음)로 되어 있는 것이 확실하다면, 이것을 참조해 주세요.Pages학급

{{html_entity_decode ($post->content()}}}}: Larabel 4.0에서 문제를 저장하였습니다.이제 내 HTML 콘텐츠는 정상적으로 해석됩니다.

언급URL : https://stackoverflow.com/questions/26023823/laravel-escaping-all-html-in-blade-template

반응형