Чтобы добавить дальнейшие объяснения, код внутри {{ }}
операторов Blade автоматически передается через htmlspecialchars()
функцию, предоставляемую php. Эта функция принимает строку и находит все зарезервированные символы, которые использует HTML. Зарезервированные символы &
<
>
и "
. Затем он заменит эти зарезервированные символы на их вариант сущности HTML. Какие следующие:
|---------------------|------------------|
| Character | Entity |
|---------------------|------------------|
| & | & |
|---------------------|------------------|
| < | < |
|---------------------|------------------|
| > | > |
|---------------------|------------------|
| " | " |
|---------------------|------------------|
Например, предположим, что у нас есть следующий оператор php:
$hello = "<b>Hello</b>";
Передается в лезвие так, {{ $hello }}
чтобы получить буквальную строку, которую вы передали:
<b>Hello</b>
Под капотом это будет на самом деле эхо, как <b>Hello<b>
Если мы хотели обойти это и фактически отобразить его как жирный тэг, мы экранируем htmlspecialchars()
функцию, добавив escape-синтаксис:
{!! $hello !!}
Обратите внимание, что мы используем только одну фигурную скобку.
Выход из вышеперечисленного даст:
Привет
Мы также можем использовать другую удобную функцию, предоставляемую php, которая является html_entity_decode()
функцией. Это преобразует сущности HTML в их уважаемые символы HTML. Думайте об этом как об обратномhtmlspecialchars()
Например, скажем, у нас есть следующий оператор php:
$hello = "<b> Hello <b>";
Теперь мы можем добавить эту функцию к нашему экранированному оператору blade:
{!! html_entity_decode($hello) !!}
Это возьмет HTML-сущность <
и проанализирует ее как HTML-код.<
, а не просто строку.
То же самое будет применяться к сущности больше, чем >
который даст
Привет
Весь смысл побега в первую очередь состоит в том, чтобы избежать атак XSS. Поэтому будьте очень осторожны при использовании escape-синтаксиса, особенно если пользователи в вашем приложении сами предоставляют HTML, они могут вводить свой собственный код по своему усмотрению.
{!! nl2br($post->description) !!}
работает для меня, если у меня есть только пробелы и бр.