Saya memiliki string yang dikembalikan ke salah satu pandangan saya, seperti ini:
$text = '<p><strong>Lorem</strong> ipsum dolor <img src="images/test.jpg"></p>'
Saya mencoba menampilkannya dengan Blade:
{{$text}}
Namun, outputnya adalah string mentah dan bukan HTML yang diberikan. Bagaimana cara menampilkan HTML dengan Blade di Laravel 5?
PS. PHP echo()
menampilkan HTML dengan benar.
{!! nl2br($post->description) !!}
bekerja untuk saya jika saya hanya punya spasi dan br.Jawaban:
Anda harus menggunakan
Tali akan otomatis keluar saat menggunakan
{{ $text }}
.sumber
Hello, {!! $name !!}.
" laravel.com/docs/5.5/blade#displaying-data$text
berisi input pengguna dan Anda tidak lolos dengan benar. Misalnya,$text = 'Hello <b>'.$_GET['name'].'</b>';
berbahaya karena$_GET['name']
bisa menyertakan HTML, yang akan memungkinkan XSS. Anda bisa melakukannya$text = 'Hello <b>'.htmlentities($_GET['name']).'</b>';
dan akan aman.<meta cc="grâce à">
dan saya ingin menunjukkannya di blade, Ini akan terlihat seperti ini<meta cc="grâce à">
. Jadi jawaban untuk saya adalah @Praveen_Dabral 'sUntuk laravel 5
Mencari tahu melalui tautan ini , lihat jawaban RachidLaasri
sumber
Anda dapat mencoba ini:
Anda harus melihatnya di: http://laravel.com/docs/5.0/upgrade#upgrade-5.0
sumber
Mohon gunakan
Hanya dalam kasus HTML sementara jika Anda ingin membuat data, sengatan dll. Gunakan
Ini karena ketika file blade Anda dikompilasi
{{ $test }}
dikonversi menjadi<?php echo e($test) ?>
sementara{!! $test !!}
dikonversi menjadi<?php echo $test ?>
sumber
Ada cara lain. Jika tujuan objek adalah untuk merender html Anda dapat menerapkan
\Illuminate\Contracts\Support\Htmlable
kontrak yang telahtoHtml()
metode.Kemudian Anda dapat merender objek itu dari blade seperti ini:
{{ $someObject }}
(perhatikan, tidak perlu{!! !!}
sintaks).Juga jika Anda ingin mengembalikan properti html dan Anda tahu itu html, gunakan
\Illuminate\Support\HtmlString
kelas seperti ini:dan kemudian gunakan seperti
{{ $product->getProductDescription() }}
.Tentu saja bertanggung jawab ketika langsung memberikan html mentah pada halaman.
sumber
Coba ini. Ini berhasil untuk saya.
Dalam templat Laravel Blade, {{}} akan lepas html. Jika Anda ingin menampilkan html dari controller dalam pandangan, decode html dari string.
sumber
Kamu bisa memakai {!! $ text !!} untuk merender kode HTML di Laravel
Jika Anda menggunakan
Itu tidak akan membuat kode HTML dan mencetak sebagai string.
sumber
Gunakan
{!! $text !!}
untuk menampilkan data tanpa menghindarinya. Pastikan Anda tidak melakukan ini dengan data yang berasal dari pengguna dan belum dibersihkan.sumber
ini sederhana
kompilasi laravel sebagai elemen dom dan
{{$text}}
cetak sebagai stringsumber
Anda dapat melakukannya dengan banyak cara di laravel 5 ..
sumber
Anda dapat melakukannya menggunakan tiga cara penggunaan pertama jika kondisi seperti di bawah ini
Ini adalah cara kedua
Cara ketiga dan tepat untuk menggunakan operator ternary pada blade
Saya harap cara ketiga sempurna untuk operator ternary bekas pada blade.
sumber
Untuk menambahkan penjelasan lebih lanjut, kode di dalam
{{ }}
pernyataan Blade secara otomatis melewatihtmlspecialchars()
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:Misalnya, anggap kita memiliki pernyataan php berikut:
Dimasukkan ke dalam blade karena
{{ $hello }}
akan menghasilkan string literal yang Anda berikan: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:
Kami sekarang dapat menambahkan fungsi ini ke pernyataan blade kami yang diloloskan:
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.
sumber
Jika Anda ingin melarikan diri dari penggunaan data
Jika tidak ingin lepas dari penggunaan data
Namun hingga Laravel-4 bisa Anda gunakan
Ketika datang ke Laravel-5
Anda juga dapat melakukan ini dengan fungsi PHP
buka dokumen PHP untuk parameter fungsi ini
html_entity_decode - php.net
sumber
Ini berfungsi dengan baik untuk Laravel 5.6
Dengan cara yang berbeda
Itu tidak akan membuat kode HTML dan mencetak sebagai string.
Untuk lebih jelasnya buka tautan: - Tampilkan HTML dengan Blade
sumber
Untuk yang menggunakan tinymce dan markup di dalam textarea:
sumber
Saya pernah ke sana dan itu salah saya. Dan yang sangat bodoh.
jika Anda lupa ekstensi .blade pada nama file, file itu tidak mengerti blade tetapi menjalankan kode php. Kamu harus menggunakan
dari pada
Semoga ini bisa membantu seseorang
sumber
Coba ini, Ini berhasil:
sumber
Jika Anda menggunakan kelas Bootstrap Collapse terkadang
{!! $text !!}
tidak berfungsi untuk saya tetapi{{ html_entity_decode($text) }}
berhasil untuk saya.sumber