Per aggiungere ulteriori spiegazioni, il codice all'interno delle {{ }}
istruzioni Blade viene automaticamente passato attraverso la htmlspecialchars()
funzione fornita da php. Questa funzione accetta una stringa e troverà tutti i caratteri riservati utilizzati da HTML. I caratteri riservati sono &
<
>
e "
. Sostituirà quindi questi caratteri riservati con la loro variante di entità HTML. Quali sono i seguenti:
|---------------------|------------------|
| Character | Entity |
|---------------------|------------------|
| & | & |
|---------------------|------------------|
| < | < |
|---------------------|------------------|
| > | > |
|---------------------|------------------|
| " | " |
|---------------------|------------------|
Ad esempio, supponiamo di avere la seguente istruzione php:
$hello = "<b>Hello</b>";
Passato alla lama in quanto {{ $hello }}
produrrebbe la stringa letterale che hai passato:
<b>Hello</b>
Sotto il cofano, in realtà echeggerebbe come <b>Hello<b>
Se volessimo ignorarlo e renderlo effettivamente un tag in grassetto, sfuggiamo alla htmlspecialchars()
funzione aggiungendo il pannello della sintassi di escape che fornisce:
{!! $hello !!}
Si noti che usiamo solo una parentesi graffa.
L'output di quanto sopra produrrebbe:
Ciao
Potremmo anche utilizzare un'altra utile funzione fornita da PHP, che è la html_entity_decode()
funzione. Ciò convertirà le entità HTML nei loro caratteri HTML rispettati. Pensalo come il contrario dihtmlspecialchars()
Ad esempio diciamo che abbiamo la seguente dichiarazione php:
$hello = "<b> Hello <b>";
Ora possiamo aggiungere questa funzione alla nostra istruzione blade con escape:
{!! html_entity_decode($hello) !!}
Questo prenderà l'entità HTML <
e la analizzerà come codice HTML <
, non solo una stringa.
Lo stesso si applicherà con l'entità maggiore di >
che cederebbe
Ciao
Il punto fondamentale di scappare è innanzitutto evitare gli attacchi XSS. Quindi fai molta attenzione quando usi la sintassi di escape, specialmente se gli utenti nella tua applicazione stanno fornendo loro stessi l'HTML, potrebbero iniettare il loro codice a loro piacimento.
{!! nl2br($post->description) !!}
funziona per me se ho solo spazi e fratelli.