У меня есть строка, возвращенная в одно из моих представлений, например:
$text = '<p><strong>Lorem</strong> ipsum dolor <img src="images/test.jpg"></p>'
Я пытаюсь показать это с помощью Blade:
{{$text}}
Тем не менее, вывод представляет собой необработанную строку вместо отрисованного HTML. Как мне отобразить HTML с Blade в Laravel 5?
PS. PHP echo()
правильно отображает HTML.
{!! nl2br($post->description) !!}
работает для меня, если у меня есть только пробелы и бр.Ответы:
Вам нужно использовать
Строка будет автоматически экранирована при использовании
{{ $text }}
.источник
Hello, {!! $name !!}.
» laravel.com/docs/5.5/blade#displaying-data$text
содержит ввод пользователя, и вы не избежали этого должным образом. Например,$text = 'Hello <b>'.$_GET['name'].'</b>';
это опасно, потому что$_GET['name']
может включать HTML, который позволит XSS. Вы могли бы сделать$text = 'Hello <b>'.htmlentities($_GET['name']).'</b>';
и будет в безопасности.<meta cc="grâce à">
и я хочу показать это лезвием, это будет выглядеть так<meta cc="grâce à">
. Так что ответ для меня - @Praveen_Dabral'sДля Laravel 5
Разобрался по этой ссылке , см. Ответ RachidLaasri
источник
Вы можете попробовать это:
Вы должны взглянуть на: http://laravel.com/docs/5.0/upgrade#upgrade-5.0
источник
Пожалуйста, используйте
Только в случае HTML, в то время как если вы хотите визуализировать данные, используйте sting и т. Д.
Это потому, что когда ваш блейд-файл скомпилирован
{{ $test }}
преобразуется в<?php echo e($test) ?>
то время как{!! $test !!}
преобразуется в<?php echo $test ?>
источник
Есть другой способ. Если целью объекта является рендеринг html, вы можете реализовать
\Illuminate\Contracts\Support\Htmlable
контракт сtoHtml()
методом.Затем вы можете визуализировать этот объект из blade-сервера следующим образом:
{{ $someObject }}
(обратите внимание,{!! !!}
синтаксис не требуется ).Также, если вы хотите вернуть свойство html и знаете, что это будет html, используйте следующий
\Illuminate\Support\HtmlString
класс:а затем использовать его как
{{ $product->getProductDescription() }}
.Конечно, будьте ответственны при непосредственном рендеринге необработанного HTML на странице.
источник
Попробуй это. Это сработало для меня.
В шаблоне Laravel Blade {{}} не будет HTML. Если вы хотите отобразить html из контроллера, расшифруйте html из строки.
источник
Ты можешь использовать {!! $ text !!} для рендеринга HTML-кода в Laravel
Если вы используете
Он не будет отображать HTML-код и печатать в виде строки.
источник
Используется
{!! $text !!}
для отображения данных без экранирования. Просто убедитесь, что вы не делаете это с данными, которые пришли от пользователя и не были очищены.источник
это просто
laravel скомпилируйте как элемент dom и
{{$text}}
напечатайте как строкуисточник
Вы можете сделать это многими способами в Laravel 5 ..
источник
Вы можете сделать это, используя три способа: сначала используйте условие, как показано ниже
Второй путь
Третий и правильный способ использования троичного оператора на лезвии
Я надеюсь, что третий способ идеально подходит для подержанных троичного оператора на лезвии.
источник
Чтобы добавить дальнейшие объяснения, код внутри
{{ }}
операторов Blade автоматически передается черезhtmlspecialchars()
функцию, предоставляемую php. Эта функция принимает строку и находит все зарезервированные символы, которые использует HTML. Зарезервированные символы&
<
>
и"
. Затем он заменит эти зарезервированные символы на их вариант сущности HTML. Какие следующие:Например, предположим, что у нас есть следующий оператор php:
Передается в лезвие так,
{{ $hello }}
чтобы получить буквальную строку, которую вы передали:Под капотом это будет на самом деле эхо, как
<b>Hello<b>
Если мы хотели обойти это и фактически отобразить его как жирный тэг, мы экранируем
htmlspecialchars()
функцию, добавив escape-синтаксис:{!! $hello !!}
Обратите внимание, что мы используем только одну фигурную скобку.
Выход из вышеперечисленного даст:
Привет
Мы также можем использовать другую удобную функцию, предоставляемую php, которая является
html_entity_decode()
функцией. Это преобразует сущности HTML в их уважаемые символы HTML. Думайте об этом как об обратномhtmlspecialchars()
Например, скажем, у нас есть следующий оператор php:
Теперь мы можем добавить эту функцию к нашему экранированному оператору blade:
Это возьмет HTML-сущность
<
и проанализирует ее как HTML-код.<
, а не просто строку.То же самое будет применяться к сущности больше, чем
>
который даст
Привет
Весь смысл побега в первую очередь состоит в том, чтобы избежать атак XSS. Поэтому будьте очень осторожны при использовании escape-синтаксиса, особенно если пользователи в вашем приложении сами предоставляют HTML, они могут вводить свой собственный код по своему усмотрению.
источник
Если вы хотите избежать использования данных
Если не хотите избежать использования данных
Но до Laravel-4 вы можете использовать
Когда доходит до Laravel-5
Вы также можете сделать это с помощью функции PHP
пройти через документ PHP для параметров этой функции
html_entity_decode - php.net
источник
Это отлично работает для Laravel 5.6
По-другому
Он не будет отображать HTML-код и печатать в виде строки.
Для более подробной информации откройте ссылку: - Показать HTML с Blade
источник
Для тех, кто использует tinymce и разметку внутри textarea:
источник
Я был там, и это была моя вина. И очень глупый.
Если вы забыли расширение .blade в имени файла, этот файл не понимает blade-сервер, но запускает php-код. Вы должны использовать
вместо того
надеюсь, это поможет кому-то
источник
Попробуйте это, это сработало:
источник
Если вы используете класс Bootstrap Collapse, иногда
{!! $text !!}
он не работает для меня, но{{ html_entity_decode($text) }}
работает для меня.источник