wake-up-neo.com

Laravel Alle HTML-Dateien in der Blade-Vorlage werden ausgeblendet

Ich baue ein kleines CMS in Laravel und habe versucht, den Inhalt (der in der DB gespeichert ist) anzuzeigen. Es werden die HTML-Tags angezeigt, anstatt sie auszuführen auto html_entity_decode für alle gedruckten Daten.

<?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);
    }
}

Ich habe versucht, den Inhalt mit der geschweiften Klammer zu drucken.

{{ $content->page_desc }}

und dreifache geschweifte Klammer.

{{{ $content->page_desc }}}

Und sie geben das gleiche Ergebnis. Ich muss diese HTML-Tags ausführen, anstatt sie zu maskieren.

56
Dr.Neo

Ändern Sie Ihre Syntax von {{ }} In {!! !!}.

Wie The Alpha in einem Kommentar oben sagte (keine Antwort, also dachte ich, ich würde posten), hat in Laravel 5, der {{ }} (Zuvor nicht maskierte Ausgabesyntax) geändert in {!! !!}. Ersetzen Sie {{ }} durch {!! !!} und es sollte funktionieren.

132
Ivan Topolcic

benutze diesen Tag {!! Beschreibungstext !!}

13
sanjay

Fügen Sie den Inhalt in {! !}.

7
Avinash Kumar

Ich hatte das gleiche Problem. Vielen Dank für die Antworten oben, ich habe mein Problem gelöst. Wenn es Leute gibt, die vor demselben Problem stehen, gibt es zwei Möglichkeiten, es zu lösen:

  • Sie können {!! $news->body !!}
  • Sie können traditionelles PHP-Öffnen verwenden (es wird nicht empfohlen) wie: <?php echo $string ?>

Ich hoffe, es hilft.

5

Es gibt kein Problem mit der Anzeige von HTML-Code in Blade-Vorlagen.

Zum Testen können Sie routen.php nur eine Route hinzufügen:

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);
    }
);

und in hello.blade.php Datei:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>

{{ $content->page_desc }}

</body>
</html>

Für den folgenden Code erhalten Sie die Ausgabe wie auf dem Bild

Output

Also wahrscheinlich page_desc ist in deinem Fall nicht das, was du erwartest. Aber wie Sie sehen, kann es potentiell gefährlich sein, wenn jemand zum Beispiel "Tag" verwendet. Sie sollten sich also wahrscheinlich auf Ihrer Route befinden, bevor Sie dem Blade-Vorlagenfilter einige Tags zuweisen

EDIT

Ich habe es auch getestet, indem ich den gleichen Code in die Datenbank gestellt habe:

Route::get('/', function () {

        $data = User::where('id','=',1)->first();

        return View::make('hello')->with('content', $data);
    }
);

Die Ausgabe ist in diesem Fall genau gleich

Edit2

Ich weiß auch nicht, ob Pages Ihr Modell oder ein Verkäufermodell ist. Zum Beispiel kann Accessor drinnen sein:

public function getPageDescAttribute($value)
{
    return htmlspecialchars($value);
}

und dann, wenn Sie page_desc Attribut, das Sie ändern werden page_desc mit htmlspecialchars. Wenn Sie also sicher sind, dass die Daten in der Datenbank im HTML-Format (ohne Escapezeichen) vorliegen, sollten Sie sich diese Pages -Klasse ansehen

2