2015-04-20 17 views
5

Ich habe eine $text Variable, die etwas Text und HTML-Code enthält. Ich möchte seinen HTML-Code rendern, aber trotzdem sicherstellen, dass der Rest der Zeichenfolge maskiert ist.Eine Zeichenfolge mit Blade Escaping HTML

$text = 'Example text with image <img src"image_1.jpg">. More text...' 

// This will render the HTML but will NOT escape the string 
{!! $text !!} 

// This will escape and display the variable as raw string, with no HTML rendering 
{{ $text }} 

Gibt es in Laravel 5 eine Möglichkeit, eine Zeichenfolge mit Blade zu entkommen, während HTML zugelassen wird?

+0

was meinst du mit "entkommen"? –

+0

Ich meine den Schutz gegen XSS, der normalerweise mit doppelten geschweiften Klammern in Blade erreicht wird - '{{...}}'. Es scheint, ich kann nur eine von zwei gleichzeitig haben: eine Escape-Zeichenfolge ohne HTML-Rendering oder Rendering mit nicht-Escaping ... – lesssugar

+0

Wie sollte die Anwendung entscheiden, ob sie einem HTML-Tag entkommen muss oder nicht? Der eigentliche Zweck der Flucht besteht darin, * HTML nicht zu rendern. – lukasgeiter

Antwort

0

In diesem Fall müssen Sie die Zeichenfolge manuell bearbeiten.

Es könnte sein, dass Purifier https://github.com/mewebstudio/Purifier tun wird, was Sie brauchen. Es macht Strings harmlos und dann ist es sicher, den HTML-Code darin zu drucken.

Andernfalls müssen Sie Ihren eigenen Parser schreiben, wenn nichts anderes gefunden wird.

1

Mir ist solche Funktionalität in Blade nicht bekannt. Sie können nicht nur bestimmte HTML-Tags zulassen, da sie unerwünschte Inhalte (wie Onload) enthalten können. Die Verarbeitung von Strings kann schwierig sein. Haben Sie in Betracht gezogen Auszeichnungssprache?

+0

Genau! +1 für die Erwähnung von "Onload" – lukasgeiter

+0

Ich zweite, dass. Verwenden Sie eine Metasprache mit einem bestimmten Satz zulässiger Elemente wie markdown _if_, wenn Sie vom Benutzer generierte Inhalte anzeigen. Wenn nicht (wie in Ihrem Beispiel), wird es einfach nicht angezeigt. – luchaos