Laravel 5: отображение HTML с помощью Blade

183

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

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

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

{{$text}}

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

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

Теги:
laravel-5
blade

18 ответов

440
Лучший ответ

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

{!! $text !!}

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

  • 3
    Вот документы Laravel, в которых упоминается это: «Если вы не хотите, чтобы ваши данные были экранированы, вы можете использовать следующий синтаксис: Hello, {!! $name !!}. » Laravel.com/docs/5.5/blade# отображение данных,
  • 1
    Мне также интересно, о чем упоминал @Ryan. Разве это не проблема безопасности?
Показать ещё 2 комментария
45

Для laravel 5

{!!html_entity_decode($text)!!}

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

  • 1
    Спасибо .. это работает .. {!! html_entity_decode ($ data) !!}
33

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

{!! $text !!}

Вы должны взглянуть на: http://laravel.com/docs/5.0/upgrade#upgrade-5.0

13

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

{!! $test !!} 

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

{{ $test }}

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

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

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

7

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

{{ html_entity_decode($text) }}

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

  • 3
    это не правильно, это выше ответов, это может быть сделано по-вашему, это просто сбивает с толку программиста
6

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

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

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

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

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

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

  • 0
    да твой путь самый лучший
4

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

{!! $text !!}

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

{{ $text }}

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

2

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

1

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

{!! $text !!}

{!! html_entity_decode($text) !!}
  • 0
    если вы храните закодированные теги (& lt; p & gt; hello world. & lt; / p & gt;) в базе данных выше, код работает ... Спасибо !!!
  • 0
    @narasimharaosp Добро пожаловать дорогой
1

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

<?php echo "$text"; ?>

По-другому

{!! $text !!}

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

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

1

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

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

0

Попробуйте это, это сработало
@php echo $ text; @endphp

0

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

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

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

0

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

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

/resources/views/filename.blade.php

вместо

/resources/views/filename.php

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

0

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

{{ htmlspecialchars($text) }}
0

это просто

{!! $text !!}

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

-1

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

{{ $test }}

По-другому

<?PHP $test ?>
-2

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню