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 !!}

строка будет автоматически escape при выполнении {{ }}


для laravel 5

{!!html_entity_decode($text)!!}

понял через это ссылке, см. RachidLaasri ответ


вы можете попробовать это:

{!! $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 документ для параметров этой функции

html_entity_decode - php.net


в Php Laravel для отображения тестовых данных $в HTML-странице : -

{{ $test }}

иначе

<? $test ?>

использовать {!! $text !!}для отображения данных, не экранируя его. Просто убедитесь, что вы не делаете этого с данными, которые пришли от пользователя и не были очищены.


это отлично работает для Laravel 5.6

<?php echo "$text"; ?>

иначе

{!! $text !!}

он не будет отображать HTML-код и печатать в виде строки.

для более подробной информации откройте ссылку:- отображение HTML с помощью Blade


простой

{!! $текст !!}

laravel компилируется как элемент dom и {{$text}} печатается как строка


для тех, кто использует tinymce и разметку в textarea:

{{ htmlspecialchars($text) }}

Я был там, и это была моя вина. И очень глупый.

Если вы забыли .расширение blade в имени файла этот файл не понимает blade, но запускает php-код. Вы должны использовать

/resources/views/filename.blade.php

вместо

/resources/views/filename.php

надеюсь, это поможет кому-то