Ich habe eine Zeichenfolge zu einer meiner Ansichten wie folgt zurückgegeben:
$text = '<p><strong>Lorem</strong> ipsum dolor <img src="images/test.jpg"></p>'
Ich versuche es mit Blade anzuzeigen:
{{$text}}
Die Ausgabe ist jedoch eine Rohzeichenfolge anstelle von gerendertem HTML. Wie zeige ich HTML mit Blade in Laravel 5 an?
PS. PHP echo()
zeigt den HTML-Code korrekt an.
{!! nl2br($post->description) !!}
funktioniert für mich, wenn ich nur Leerzeichen und br habe.Antworten:
Sie müssen verwenden
Die Zeichenfolge wird bei Verwendung automatisch maskiert
{{ $text }}
.quelle
Hello, {!! $name !!}.
" laravel.com/docs/5.5/blade#displaying-data$text
Benutzereingaben enthält und Sie dies nicht richtig umgehen konnten . Zum Beispiel$text = 'Hello <b>'.$_GET['name'].'</b>';
ist gefährlich, weil$_GET['name']
HTML enthalten könnte, das XSS erlauben würde. Sie könnten tun$text = 'Hello <b>'.htmlentities($_GET['name']).'</b>';
und wären sicher.<meta cc="grâce à">
und es in einer Klinge zeigen möchte, wird es so aussehen<meta cc="grâce à">
. Die Antwort für mich ist also @Praveen_Dabral 'sFür Laravel 5
Durch diesen Link herausgefunden , siehe RachidLaasri Antwort
quelle
Sie können dies versuchen:
Sie sollten einen Blick darauf werfen: http://laravel.com/docs/5.0/upgrade#upgrade-5.0
quelle
Benutzen Sie bitte
Nur im Falle von HTML, wenn Sie Daten, Stiche usw. rendern möchten
Dies liegt daran, dass Ihre Blade-Datei kompiliert wird
{{ $test }}
wird in<?php echo e($test) ?>
while konvertiert{!! $test !!}
wird konvertiert zu<?php echo $test ?>
quelle
Es geht auch anders. Wenn das Ziel darin besteht, HTML zu rendern, können Sie einen
\Illuminate\Contracts\Support\Htmlable
Vertrag mit einertoHtml()
Methode implementieren .Dann können Sie das Objekt wie folgt aus dem Blade rendern:
{{ $someObject }}
(Hinweis, keine{!! !!}
Syntax erforderlich ).Wenn Sie die HTML-Eigenschaft zurückgeben möchten und wissen, dass es sich um HTML handelt, verwenden Sie die folgende
\Illuminate\Support\HtmlString
Klasse:und dann benutze es gerne
{{ $product->getProductDescription() }}
.Seien Sie natürlich verantwortlich, wenn Sie rohes HTML direkt auf der Seite rendern.
quelle
Versuche dies. Es hat bei mir funktioniert.
In der Laravel Blade-Vorlage wird {{}} HTML entkommen. Wenn Sie HTML vom Controller in der Ansicht anzeigen möchten, dekodieren Sie HTML vom String.
quelle
Sie können {!! $ text !!} zum Rendern von HTML-Code in Laravel
Wenn du benutzt
HTML-Code wird nicht gerendert und als Zeichenfolge gedruckt.
quelle
Verwenden Sie
{!! $text !!}
diese Option , um Daten anzuzeigen, ohne sie zu umgehen. Stellen Sie nur sicher, dass Sie dies nicht mit Daten tun, die vom Benutzer stammen und nicht bereinigt wurden.quelle
Es ist eine einfache
Laravel kompilieren als Dom-Element und
{{$text}}
drucken als Stringquelle
Sie können mit vielen Möglichkeiten in Laravel 5 tun ..
quelle
Sie können dies auf drei Arten tun, indem Sie zuerst die folgende Bedingung verwenden
Das ist der zweite Weg
Der dritte und richtige Weg zur Verwendung des ternären Bedieners auf der Klinge
Ich hoffe, der dritte Weg ist perfekt für gebrauchte ternäre Bediener auf Klingen.
quelle
Um weitere Erklärungen hinzuzufügen, wird Code in Blade-
{{ }}
Anweisungen automatisch durch die vonhtmlspecialchars()
PHP bereitgestellte Funktion geleitet. Diese Funktion nimmt eine Zeichenfolge auf und findet alle reservierten Zeichen, die HTML verwendet. Reservierte Zeichen sind&
<
>
und"
. Diese reservierten Zeichen werden dann durch ihre HTML-Entitätsvariante ersetzt. Welches sind die folgenden:Angenommen, wir haben die folgende PHP-Anweisung:
In die Klinge übergeben
{{ $hello }}
, um die wörtliche Zeichenfolge zu erhalten, die Sie übergeben haben:Unter der Haube würde es tatsächlich als widerhallen
<b>Hello<b>
Wenn wir dies umgehen und es tatsächlich als fettes Tag rendern möchten, können wir die
htmlspecialchars()
Funktion umgehen, indem wir das Escape-Syntax-Blade hinzufügen, das Folgendes bietet:{!! $hello !!}
Beachten Sie, dass wir nur eine geschweifte Klammer verwenden.
Die Ausgabe der obigen würde ergeben:
Hallo
Wir könnten auch eine andere praktische Funktion verwenden, die PHP bietet, nämlich die
html_entity_decode()
Funktion. Dadurch werden HTML-Entitäten in ihre respektierten HTML-Zeichen konvertiert. Betrachten Sie es als das Gegenteil vonhtmlspecialchars()
Nehmen wir zum Beispiel an, wir haben die folgende PHP-Anweisung:
Wir könnten diese Funktion jetzt zu unserer Escape-Blade-Anweisung hinzufügen:
Dadurch wird die HTML-Entität
<
als HTML-Code<
und nicht nur als Zeichenfolge analysiert .Gleiches gilt für die Entität größer als
>
was ergeben würde
Hallo
Der springende Punkt bei der Flucht ist zunächst, XSS-Angriffe zu vermeiden. Seien Sie also sehr vorsichtig, wenn Sie die Escape-Syntax verwenden, insbesondere wenn Benutzer in Ihrer Anwendung den HTML-Code selbst bereitstellen, können sie ihren eigenen Code nach Belieben einfügen.
quelle
Wenn Sie der Datennutzung entgehen möchten
Wenn Sie der Datennutzung nicht entkommen möchten
Aber bis Laravel-4 können Sie verwenden
Wenn es um Laravel-5 geht
Sie können dies auch mit der PHP-Funktion tun
Im PHP-Dokument finden Sie die Parameter dieser Funktion
html_entity_decode - php.net
quelle
Dies funktioniert gut für Laravel 5.6
Auf andere Weise
HTML-Code wird nicht gerendert und als Zeichenfolge gedruckt.
Für weitere Details öffnen Sie den Link: - Zeigen Sie HTML mit Blade an
quelle
Für diejenigen, die Tinymce und Markup im Textbereich verwenden:
quelle
Ich war dort und es war meine Schuld. Und sehr dumm.
Wenn Sie die Erweiterung .blade im Dateinamen vergessen, versteht diese Datei Blade nicht, führt jedoch PHP-Code aus. Du solltest benutzen
anstatt
hoffe das hilft jemandem
quelle
Versuchen Sie dies, es hat funktioniert:
quelle
Wenn Sie die Bootstrap Collapse-Klasse verwenden,
{!! $text !!}
funktioniert dies manchmal nicht für mich, sondern{{ html_entity_decode($text) }}
für mich.quelle