2015-04-20 18 views
5

Ho una variabile $text che contiene testo e codice HTML. Mi piacerebbe rendere il suo codice HTML, ma assicurarmi che il resto della stringa sia sfuggito.Escaping una stringa con Blade, rendering 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 }} 

In Laravel 5, c'è un modo per sfuggire a una stringa con Blade pur consentendo l'HTML?

+0

cosa intendi con "fuga"? –

+0

Intendo la protezione contro XSS che si ottiene normalmente con doppie parentesi graffe in Blade - '{{...}}'. Sembra che io possa avere solo uno dei due allo stesso tempo: una stringa di escape senza rendering HTML o rendering senza escape ... – lesssugar

+0

Come dovrebbe l'applicazione decidere se deve sfuggire un tag HTML o no? Lo scopo dell'escape è * non * rendere HTML. – lukasgeiter

risposta

0

In questo caso è necessario eseguire l'elaborazione manuale della stringa.

Potrebbe essere possibile che il purificatore https://github.com/mewebstudio/Purifier faccia quello che ti serve. Renderà le stringhe innocue e quindi è sicuro stampare l'html in esso.

Altrimenti è necessario scrivere il proprio parser se non si trova nulla di simile.

1

Non sono a conoscenza di tale funzionalità in blade. Non puoi semplicemente consentire specifici tag HTML, perché potrebbero avere cose indesiderate (come onload) al loro interno. L'elaborazione della stringa può essere complicata. Hai preso in considerazione il linguaggio di marcatura ?

+0

Esattamente! +1 per la menzione di 'onload' – lukasgeiter

+0

Secondo. Utilizza una lingua meta con un insieme specifico di elementi consentiti come markdown _if_ se visualizzi contenuti generati dagli utenti. In caso contrario (come nel tuo esempio) basta visualizzarlo senza caratteri di escape. – luchaos

Problemi correlati