Laravel 5: отображение HTML с клинком

У меня есть строка, возвращаемая одному из моих представлений, например:

$text = '<p><strong>Lorem</strong> ipsum dolor <img src="images/test.jpg"></p>'

Я пытаюсь отобразить его с помощью Blade:

{{$text}}

Однако вывод представляет собой необработанную строку вместо отображаемого HTML. Как отобразить HTML с Blade в Laravel 5?

PS. PHP echo() отображает HTML правильно.

Ответ 1

Вам нужно использовать

{!! $text !!}

Строка автоматически исчезнет при использовании {{ $text }}.

Ответ 2

Для laravel 5

{!!html_entity_decode($text)!!}

Выявлено это ссылка, см. ответ RachidLaasri

Ответ 4

Пожалуйста, используйте

{!! $test !!} 

Только в случае HTML, в то время как если вы хотите визуализировать данные, используйте sting и т.д.

{{ $test }}

Это потому, что когда ваш блейд файл скомпилирован

{{ $test }} преобразуется в <?php echo e($test)?>

{!! $test !!} {!! $test !!} преобразуется в <?php echo $test?>

Ответ 5

Есть и другой способ. Если целью объекта является рендеринг html, вы можете реализовать контракт \Illuminate\Contracts\Support\Htmlable, который имеет метод toHtml().

Затем вы можете визуализировать этот объект из лезвия следующим образом: {{ $someObject }} (обратите внимание, нет необходимости в синтаксисе {!! !!}).

Также, если вы хотите вернуть свойство html, и знаете, что это будет html, используйте класс \Illuminate\Support\HtmlString следующим образом:

public function getProductDescription()
{
    return new HtmlString($this->description);
}

а затем используйте его как {{ $product->getProductDescription() }}.

Конечно, ответьте, когда напрямую передаете raw html на странице.

Ответ 6

Попробуйте это. Это сработало для меня.

{{ html_entity_decode($text) }}

В шаблоне Blade Laravel, {{}} wil escape html. Если вы хотите отобразить html из контроллера в поле зрения, декодируйте html из строки.

Ответ 7

Ты можешь использовать {!! $ text !!} для рендеринга HTML-кода в Laravel

{!! $text !!}

Если вы используете

{{ $text }}

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

Ответ 8

это просто

{!! $text !!}

Компиляция laravel как элемент dom и печать {{$text}} в виде строки

Ответ 9

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

Ответ 10

Вы можете сделать много способов в Laravel 5..

{!! $text !!}

{!! html_entity_decode($text) !!}

Ответ 11

Вы можете сделать это, используя три способа: сначала используйте условие, как показано ниже

{!! $text !!}

Второй путь

<td class="nowrap">
@if( $order->status == '0' )
    <button class="btn btn-danger">Inactive</button>
@else
    <button class="btn btn-success">Active</button>
@endif
</td>

Третий и правильный способ использования троичного оператора на лезвии

<td class="nowrap">
      {!! $order->status=='0' ? 
          '<button class="btn btn-danger">Inactive</button> : 
          '<button class="btn btn-success">Active</button> !!}
</td>

Я надеюсь, что третий способ идеально подходит для подержанных троичного оператора на лезвии.

Ответ 12

Если вы хотите избежать использования данных

{{ $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

Ответ 13

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

<?php echo "$text"; ?>

По-другому

{!! $text !!}

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

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

Ответ 14

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

{{ htmlspecialchars($text) }}

Ответ 15

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

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

/resources/views/filename.blade.php

вместо

/resources/views/filename.php

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

Ответ 16

Попробуйте это, это сработало:

@php 
   echo $text; 
@endphp

Ответ 17

В PHP Laravel для отображения $test data на HTML-странице:

{{ $test }}

По-другому

<?PHP $test ?>

Ответ 18

$= данные пользователя:: где ( 'ID', 1) → первый();

На странице клика

Имя: {{$ data- > name}}

Ответ 19

Просто сделайте composer:dump-autoload