Daha fazla açıklama eklemek için, Blade {{ }}
ifadelerinin içindeki kod otomatik olarak htmlspecialchars()
php'nin sağladığı işlevden geçirilir . Bu işlev bir dize alır ve HTML'nin kullandığı tüm ayrılmış karakterleri bulur. Ayrılmış karakterler &
<
>
ve "
. Daha sonra bu ayrılmış karakterleri HTML varlık varyantlarıyla değiştirir. Aşağıdakiler hangileri:
|---------------------|------------------|
| Character | Entity |
|---------------------|------------------|
| & | & |
|---------------------|------------------|
| < | < |
|---------------------|------------------|
| > | > |
|---------------------|------------------|
| " | " |
|---------------------|------------------|
Örneğin, aşağıdaki php ifadesine sahip olduğumuzu varsayalım:
$hello = "<b>Hello</b>";
Geçtiğiniz {{ $hello }}
değişmez dizgeyi vereceği gibi blade'e geçti:
<b>Hello</b>
Kaputun altında, aslında <b>Hello<b>
Bunu atlamak ve aslında cesur bir etiket olarak işlemek istersek htmlspecialchars()
, kaçış sözdizimi blade'ini ekleyerek işlevden kaçarız:
{!! $hello !!}
Sadece bir kıvırcık ayraç kullandığımızı unutmayın.
Yukarıdakilerin çıktısı:
Merhaba
Ayrıca php tarafından sağlanan başka bir kullanışlı işlevi kullanabilirsiniz, bu html_entity_decode()
işlevdir. Bu, HTML varlıklarını saygın HTML karakterlerine dönüştürür. Bunun tersi olarak düşününhtmlspecialchars()
Örneğin, aşağıdaki php deyimimiz olduğunu varsayalım:
$hello = "<b> Hello <b>";
Şimdi bu işlevi çıkış karakterimiz ifademize ekleyebiliriz:
{!! html_entity_decode($hello) !!}
Bu, HTML varlığını alır <
ve onu <
bir dize olarak değil, HTML kodu olarak ayrıştırır .
Aynı şey varlıktan daha büyük olanlar için de geçerlidir >
hangi sonuç verir
Merhaba
İlk etapta kaçmanın asıl amacı XSS saldırılarından kaçınmaktır. Bu nedenle, kaçış sözdizimini kullanırken çok dikkatli olun, özellikle uygulamanızdaki kullanıcılar HTML'yi kendileri sağlıyorsa, istedikleri gibi kendi kodlarını da ekleyebilirler.
{!! nl2br($post->description) !!}
sadece boşlukları ve br varsa benim için çalışır.