Laravel 5: отображение HTML с помощью Blade
у меня есть строка, возвращенная к одному из моих представлений, например:
$text = '<p><strong>Lorem</strong> ipsum dolor <img src="images/test.jpg"></p>'
Я пытаюсь отобразить его с помощью Blade:
{{$text}}
однако вывод представляет собой необработанную строку вместо отображаемого HTML. Как отобразить HTML с помощью Blade в Laravel 5?
PS. В PHP echo()
отображает HTML правильно.
14 ответов
вы можете попробовать это:
{!! $text !!}
вы должны взглянуть на:http://laravel.com/docs/5.0/upgrade#upgrade-5.0
пожалуйста, используйте
{!! $test !!}
только в случае HTML, если вы хотите отображать данные, жалить и т. д. использовать
{{ $test }}
это потому, что когда ваш файл blade компилируется
{{ $test }}
превращается в <?php echo e($test) ?>
в то время как
{!! $test !!}
превращается в <?php echo $test ?>
попробуйте это. У меня получилось.
{{ html_entity_decode($text) }}
в шаблоне лезвия Laravel, {{ }} Wil escape html. Если вы хотите отобразить html из контроллера в представлении, декодируйте html из строки.
есть другой способ. Если целью объекта является рендеринг html, вы можете реализовать \Illuminate\Contracts\Support\Htmlable
контракта toHtml()
метод.
затем вы можете отобразить этот объект из blade следующим образом:{{ $someObject }}
(обратите внимание, нет необходимости {!! !!}
синтаксис).
также, если вы хотите вернуть свойство html, и вы знаете, что это будет html, используйте \Illuminate\Support\HtmlString
класс такой:
public function getProductDescription()
{
return new HtmlString($this->description);
}
и затем использовать его как {{ $product->getProductDescription() }}
.
конечно, будьте ответственны при прямом рендеринге raw html на-страница.
Вы можете использовать {!! $текст !!} для рендеринга HTML-кода в Laravel
{!! $text !!}
Если вы используете
{{ $text }}
он не будет отображать HTML-код и печатать в виде строки.
если вы хотите избежать использования данных
{{ $html }}
если не хотите избежать использования данных
{!! $html !!}
но до Laravel-4 Вы можете использовать
{{ HTML::link('/auth/logout', 'Sign Out', array('class' => 'btn btn-default btn-flat')) }}
когда приходит в Laravel-5
{!! HTML::link('/auth/logout', 'Sign Out', array('class' => 'btn btn-default btn-flat')) !!}
вы также можете сделать это с помощью PHP-функции
{{ html_entity_decode($data) }}
пройдите через PHP документ для параметров этой функции
использовать {!! $text !!}
для отображения данных, не экранируя его. Просто убедитесь, что вы не делаете этого с данными, которые пришли от пользователя и не были очищены.
это отлично работает для Laravel 5.6
<?php echo "$text"; ?>
иначе
{!! $text !!}
он не будет отображать HTML-код и печатать в виде строки.
для более подробной информации откройте ссылку:- отображение HTML с помощью Blade
Я был там, и это была моя вина. И очень глупый.
Если вы забыли .расширение blade в имени файла этот файл не понимает blade, но запускает php-код. Вы должны использовать
/resources/views/filename.blade.php
вместо
/resources/views/filename.php
надеюсь, это поможет кому-то