Aby dodać dalsze wyjaśnienia, kod w {{ }}
instrukcjach Blade jest automatycznie przekazywany przez htmlspecialchars()
funkcję udostępnianą przez php. Ta funkcja pobiera ciąg znaków i znajdzie wszystkie zastrzeżone znaki, których używa HTML. Znaki zastrzeżone to &
<
>
i "
. Następnie zastąpi te zastrzeżone znaki ich wariantem encji HTML. Które są następujące:
|---------------------|------------------|
| Character | Entity |
|---------------------|------------------|
| & | & |
|---------------------|------------------|
| < | < |
|---------------------|------------------|
| > | > |
|---------------------|------------------|
| " | " |
|---------------------|------------------|
Załóżmy na przykład, że mamy następującą instrukcję php:
$hello = "<b>Hello</b>";
Przekazany do ostrza, tak jak {{ $hello }}
dałby literalny ciąg znaków, który przekazałeś:
<b>Hello</b>
Pod maską odbija się echem jak <b>Hello<b>
Jeśli chcemy to ominąć i wyrenderować jako pogrubiony znacznik, uciekamy od htmlspecialchars()
funkcji, dodając blok składni Escape:
{!! $hello !!}
Pamiętaj, że używamy tylko jednego nawiasu klamrowego.
Wynik powyższego przyniósłby:
dzień dobry
Możemy również użyć innej przydatnej funkcji, którą zapewnia php, która jest html_entity_decode()
funkcją. Spowoduje to konwersję jednostek HTML na ich respektowane znaki HTML. Pomyśl o tym jak o odwrociehtmlspecialchars()
Na przykład powiedzmy, że mamy następującą instrukcję php:
$hello = "<b> Hello <b>";
Możemy teraz dodać tę funkcję do naszej instrukcji ucieczki ostrza:
{!! html_entity_decode($hello) !!}
Spowoduje to pobranie encji HTML <
i parsowanie jej jako kodu HTML <
, a nie tylko ciągu.
To samo będzie miało zastosowanie w przypadku podmiotu większego niż >
który dałby
dzień dobry
Chodzi przede wszystkim o uniknięcie ataków XSS. Dlatego zachowaj ostrożność podczas korzystania ze składni Escape, zwłaszcza jeśli użytkownicy w Twojej aplikacji sami dostarczają kod HTML, mogą wprowadzić własny kod według własnego uznania.
{!! nl2br($post->description) !!}
działa dla mnie, jeśli mam tylko spacje i br.