我有一个字符串返回到我的一个视图,如下所示:
$text = '<p><strong>Lorem</strong> ipsum dolor <img src="images/test.jpg"></p>'
我正在尝试用 Blade 显示它:
{{$text}}
但是,输出是原始字符串而不是呈现的 HTML。如何在 Laravel 中使用 Blade 显示 HTML?
PS。 PHP echo()
正确显示 HTML。
{!! nl2br($post->description) !!}
对我有用。
{!! html_entity_decode($content_from_db) !!}
你需要使用
{!! $text !!}
使用 {{ $text }}
时字符串将自动转义。
对于 laravel 5
{!!html_entity_decode($text)!!}
通过这个 link 弄清楚,请参阅 RachidLaasri 答案
$text
中有 HTML 实体。
请用
{!! $test !!}
仅在 HTML 的情况下,如果您想呈现数据、刺痛等,请使用
{{ $test }}
这是因为当你的刀片文件被编译时
{{ $test }}
转换为 <?php echo e($test) ?>
而
{!! $test !!}
转换为 <?php echo $test ?>
还有另一种方法。如果对象目的是呈现 html,您可以实现具有 toHtml()
方法的 \Illuminate\Contracts\Support\Htmlable
合同。
然后您可以像这样从刀片渲染该对象:{{ $someObject }}
(注意,不需要 {!! !!}
语法)。
此外,如果您想返回 html 属性并且您知道它将是 html,请使用 \Illuminate\Support\HtmlString
类,如下所示:
public function getProductDescription()
{
return new HtmlString($this->description);
}
然后像 {{ $product->getProductDescription() }}
一样使用它。
直接在页面上渲染原始html时当然要负责。
尝试这个。它对我有用。
{{ html_entity_decode($text) }}
在 Laravel Blade 模板中,{{ }} 将转义 html。如果要在视图中显示来自控制器的 html,请从字符串中解码 html。
当您的数据包含 HTML 标记时,请使用
{!! $text !!}
当您的数据不包含 HTML 标记时,请使用
{{ $text }}
您可以使用以下三种方式首先使用 if 条件,如下所示
{!! $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>
我希望第三种方式非常适合刀片上使用的三元运算符。
您可以在 laravel 5 中使用多种方式。
{!! $text !!}
{!! html_entity_decode($text) !!}
使用 {!! $text !!}
显示数据而不进行转义。请确保不要对来自用户且尚未清理的数据执行此操作。
这适用于 Laravel 5.6
<?php echo "$text"; ?>
以不同的方式
{!! $text !!}
它不会呈现 HTML 代码并打印为字符串。
欲了解更多详情,请打开链接:- Display HTML with Blade
为了进一步解释,Blade {{ }}
语句中的代码自动通过 php 提供的 htmlspecialchars()
函数传递。此函数接受一个字符串,并会查找 HTML 使用的所有保留字符。保留字符是 &
<
>
和 "
。然后它将用它们的 HTML 实体变体替换这些保留字符。以下是哪些:
|---------------------|------------------|
| Character | Entity |
|---------------------|------------------|
| & | & |
|---------------------|------------------|
| < | < |
|---------------------|------------------|
| > | > |
|---------------------|------------------|
| " | " |
|---------------------|------------------|
例如,假设我们有以下 php 语句:
$hello = "<b>Hello</b>";
作为 {{ $hello }}
传递给刀片将产生您传递的文字字符串:
<b>Hello</b>
在引擎盖下,它实际上会回显为 <b>Hello<b>
如果我们想绕过它并将其实际呈现为粗体标记,我们通过添加转义语法刀片来转义 htmlspecialchars()
函数:
{!! $hello !!}
请注意,我们只使用一个花括号。
以上的输出将产生:
你好
我们还可以利用 php 提供的另一个方便的函数,即 html_entity_decode()
函数。这会将 HTML 实体转换为它们尊重的 HTML 字符。把它想象成 htmlspecialchars()
的反面
例如,假设我们有以下 php 语句:
$hello = "<b> Hello <b>";
我们现在可以将此函数添加到我们的转义刀片语句中:
{!! html_entity_decode($hello) !!}
这将获取 HTML 实体 <
并将其解析为 HTML 代码 <
,而不仅仅是一个字符串。
这同样适用于大于实体 >
这将产生
你好
首先,逃避的重点是避免 XSS 攻击。所以在使用转义语法时要非常小心,特别是如果您的应用程序中的用户自己提供 HTML,他们可以随意注入自己的代码。
默认情况下,Blade {{ }} 语句会通过 PHP 的 htmlspecialchars 函数自动发送,以防止 XSS 攻击。如果您不希望您的数据被转义,您可以使用以下语法:
根据 the doc,您必须执行以下操作才能在 Blade 文件中呈现 html:
{!! $text !!}
在回显应用程序用户提供的内容时要非常小心。在显示用户提供的数据时,您通常应该使用转义的双花括号语法来防止 XSS 攻击。
如果你想逃避数据使用
{{ $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 文档获取该函数的参数
试试这个,它的工作:
@php
echo $text;
@endphp
{!! !!} 不安全。
在这里阅读:https://laravel.com/docs/5.6/blade#displaying-data
你可以试试:
@php
echo $variable;
@endphp
对于在 textarea 中使用 tinymce 和标记的人:
{{ htmlspecialchars($text) }}
在控制器上。
$your_variable = '';
$your_variable .= '<p>Hello world</p>';
return view('viewname')->with('your_variable', $your_variable)
如果您不希望您的数据被转义,您可以使用以下语法:
{!! $your_variable !!}
输出
Hello world
如果您使用 Bootstrap Collapse 类,有时 {!! $text !!}
不适合我,但 {{ html_entity_decode($text) }}
适合我。
我去过那里,这是我的错。而且非常愚蠢。
如果您忘记文件名中的 .blade 扩展名,则该文件不理解刀片但运行 php 代码。你应该使用
/resources/views/filename.blade.php
代替
/resources/views/filename.php
希望这对某人有所帮助
不定期副业成功案例分享
Hello, {!! $name !!}.
”laravel.com/docs/5.5/blade#displaying-data$text
包含用户输入并且您没有正确转义,这很可能是一个安全问题。例如,$text = 'Hello <b>'.$_GET['name'].'</b>';
很危险,因为$_GET['name']
可能包含允许 XSS 的 HTML。你可以做$text = 'Hello <b>'.htmlentities($_GET['name']).'</b>';
并且会很安全。<meta cc="grâce à">
的内容并且我想在刀片中显示它,它会看起来像这样<meta cc="grâce à">
。所以我的答案是@Praveen_Dabral 的