Pour ajouter des explications supplémentaires, le code à l'intérieur des {{ }}
instructions Blade est automatiquement transmis via la htmlspecialchars()
fonction fournie par php. Cette fonction prend une chaîne et trouvera tous les caractères réservés que HTML utilise. Les caractères réservés sont &
<
>
et "
. Il remplacera ensuite ces caractères réservés par leur variante d'entité HTML. Quels sont les suivants:
|---------------------|------------------|
| Character | Entity |
|---------------------|------------------|
| & | & |
|---------------------|------------------|
| < | < |
|---------------------|------------------|
| > | > |
|---------------------|------------------|
| " | " |
|---------------------|------------------|
Par exemple, supposons que nous ayons l'instruction php suivante:
$hello = "<b>Hello</b>";
Passé dans la lame comme {{ $hello }}
donnerait la chaîne littérale que vous avez passée:
<b>Hello</b>
Sous le capot, cela résonnerait <b>Hello<b>
Si nous voulions contourner cela et le rendre réellement en tant que balise en gras, nous échappons à la htmlspecialchars()
fonction en ajoutant le panneau de syntaxe d'échappement:
{!! $hello !!}
Notez que nous n'utilisons qu'une seule accolade.
La sortie de ce qui précède donnerait:
Bonjour
Nous pourrions également utiliser une autre fonction pratique fournie par php, qui est la html_entity_decode()
fonction. Cela convertira les entités HTML en leurs caractères HTML respectés. Considérez-le comme l'inverse dehtmlspecialchars()
Par exemple, disons que nous avons l'instruction php suivante:
$hello = "<b> Hello <b>";
Nous pouvons maintenant ajouter cette fonction à notre déclaration de lame échappée:
{!! html_entity_decode($hello) !!}
Cela prendra l'entité HTML <
et l'analysera en tant que code HTML <
, pas seulement une chaîne.
Il en sera de même pour l'entité supérieure à >
ce qui donnerait
Bonjour
Tout l'intérêt de s'échapper en premier lieu est d'éviter les attaques XSS. Soyez donc très prudent lorsque vous utilisez la syntaxe d'échappement, surtout si les utilisateurs de votre application fournissent eux-mêmes le code HTML, ils peuvent injecter leur propre code à leur guise.
{!! nl2br($post->description) !!}
fonctionne pour moi si je n'ai que des espaces et br.