Para agregar más explicaciones, el código dentro de las {{ }}
declaraciones de Blade se pasa automáticamente a través de la htmlspecialchars()
función que proporciona php. Esta función toma una cadena y encontrará todos los caracteres reservados que usa HTML. Los caracteres reservados son &
<
>
y "
. Luego reemplazará estos caracteres reservados con su variante de entidad HTML. ¿Cuáles son los siguientes:
|---------------------|------------------|
| Character | Entity |
|---------------------|------------------|
| & | & |
|---------------------|------------------|
| < | < |
|---------------------|------------------|
| > | > |
|---------------------|------------------|
| " | " |
|---------------------|------------------|
Por ejemplo, supongamos que tenemos la siguiente declaración php:
$hello = "<b>Hello</b>";
Pasó a blade como {{ $hello }}
produciría la cadena literal que pasó:
<b>Hello</b>
Debajo del capó, en realidad resonaría como <b>Hello<b>
Si quisiéramos omitir esto y realmente representarlo como una etiqueta en negrita, escaparemos de la htmlspecialchars()
función al agregar la hoja de sintaxis de escape que proporciona:
{!! $hello !!}
Tenga en cuenta que solo usamos una llave rizada.
El resultado de lo anterior produciría:
Hola
También podríamos utilizar otra función útil que proporciona php, que es la html_entity_decode()
función. Esto convertirá las entidades HTML en sus respetados caracteres HTML. Piense en ello como el reverso dehtmlspecialchars()
Por ejemplo, digamos que tenemos la siguiente declaración php:
$hello = "<b> Hello <b>";
Ahora podríamos agregar esta función a nuestra declaración de la hoja de escape:
{!! html_entity_decode($hello) !!}
Esto tomará la entidad HTML <
y la analizará como código HTML <
, no solo una cadena.
Lo mismo se aplicará con la entidad mayor que >
lo que daría lugar
Hola
El objetivo principal de escapar en primer lugar es evitar los ataques XSS. Por lo tanto, tenga mucho cuidado al usar la sintaxis de escape, especialmente si los usuarios de su aplicación proporcionan el HTML ellos mismos, podrían inyectar su propio código cuando lo deseen.
{!! nl2br($post->description) !!}
funciona para mí si solo tengo espacios y br.