Untuk menambahkan penjelasan lebih lanjut, kode di dalam {{ }}
pernyataan Blade secara otomatis melewati htmlspecialchars()
fungsi yang disediakan php. Fungsi ini mengambil string dan akan menemukan semua karakter khusus yang digunakan HTML. Karakter yang dilindungi adalah &
<
>
dan "
. Kemudian akan menggantikan karakter yang dipesan ini dengan varian entitas HTML mereka. Yang berikut ini:
|---------------------|------------------|
| Character | Entity |
|---------------------|------------------|
| & | & |
|---------------------|------------------|
| < | < |
|---------------------|------------------|
| > | > |
|---------------------|------------------|
| " | " |
|---------------------|------------------|
Misalnya, anggap kita memiliki pernyataan php berikut:
$hello = "<b>Hello</b>";
Dimasukkan ke dalam blade karena {{ $hello }}
akan menghasilkan string literal yang Anda berikan:
<b>Hello</b>
Di bawah tenda, itu akan benar-benar bergema <b>Hello<b>
Jika kita ingin mem-bypass ini dan benar-benar merendernya sebagai tag tebal, kita keluar dari htmlspecialchars()
fungsinya dengan menambahkan blade sintaks escape yang menyediakan:
{!! $hello !!}
Perhatikan bahwa kami hanya menggunakan satu kurung kurawal.
Output di atas akan menghasilkan:
Halo
Kita juga bisa memanfaatkan fungsi praktis lain yang disediakan oleh php, yaitu html_entity_decode()
fungsinya. Ini akan mengonversi entitas HTML ke karakter HTML yang disegani. Anggap saja sebagai kebalikan darihtmlspecialchars()
Misalnya katakanlah kita memiliki pernyataan php berikut:
$hello = "<b> Hello <b>";
Kami sekarang dapat menambahkan fungsi ini ke pernyataan blade kami yang diloloskan:
{!! html_entity_decode($hello) !!}
Ini akan mengambil entitas HTML <
dan menguraikannya sebagai kode HTML <
, bukan hanya string.
Hal yang sama akan berlaku dengan entitas yang lebih besar dari >
yang akan menghasilkan
Halo
Inti dari melarikan diri di tempat pertama adalah untuk menghindari serangan XSS. Jadi berhati-hatilah saat menggunakan sintaks escape, terutama jika pengguna dalam aplikasi Anda menyediakan HTML sendiri, mereka dapat menyuntikkan kode mereka sendiri sesuka mereka.
{!! nl2br($post->description) !!}
bekerja untuk saya jika saya hanya punya spasi dan br.