使用Blade显示HTML会显示HTML代码

我有一个字符串返回到我的一个视图,像这样:

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

我试图用Blade显示它:

{{$text}}

但是,输出是一个原始字符串,而不是呈现的HTML。我如何显示HTML与刀片在Laravel?

PS. PHP echo()正确显示HTML。

382906 次浏览

你需要使用

{!! $text !!}

使用\{\{ $text }}时,字符串将自动转义。

你可以试试这个:

{!! $text !!}

你应该看看:http://laravel.com/docs/5.0/upgrade#upgrade-5.0

为laravel 5

{!!html_entity_decode($text)!!}

通过这个链接计算出来,见RachidLaasri的答案

试试这个。这对我很管用。

\{\{ html_entity_decode($text) }}

在Laravel Blade模板中,\{\{}}将转义html。如果你想在视图中显示来自控制器的html, decode html from string。

请使用

{!! $test !!}

只有在HTML的情况下,而如果你想呈现数据,sting等使用

\{\{ $test }}

这是因为在编译刀片文件时

\{\{ $test }}转换为<?php echo e($test) ?> 而< / p >

{!! $test !!}被转换为<?php echo $test ?>

还有另一种方法。如果对象的目的是呈现html,则可以实现具有toHtml()方法的\Illuminate\Contracts\Support\Htmlable契约。

然后你可以像这样从blade渲染该对象:\{\{ $someObject }}(注意,不需要{!! !!}语法)。

同样,如果你想返回html属性,并且你知道它将是html,使用\Illuminate\Support\HtmlString类,像这样:

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

然后像\{\{ $product->getProductDescription() }}一样使用它。

当然,在页面上直接渲染原始html时要负责任。

如果要转义数据使用

\{\{ $html }}

如果不想逃避数据使用

{!! $html !!}

但在laravel4之前你可以使用

\{\{ HTML::link('/auth/logout', 'Sign Out', array('class' => 'btn btn-default btn-flat')) }}

当谈到laravel5时

{!! HTML::link('/auth/logout', 'Sign Out', array('class' => 'btn btn-default btn-flat')) !!}

您也可以使用PHP函数来实现这一点

\{\{ html_entity_decode($data) }}

通过PHP文档获取这个函数的参数

html_entity_decode - php.net .net

使用__abc0显示数据而不转义。只是要确保不要对来自用户且未被清理的数据执行此操作。

这在Laravel 5.6中工作得很好

<?php echo "$text"; ?>

以不同的方式

{!! $text !!}

它不会呈现HTML代码并将其打印为字符串。

欲了解更多详细信息,请打开链接:- 使用Blade显示HTML

对于谁使用tinymce和文本区域内的标记:

\{\{ htmlspecialchars($text) }}

我去过那里,那是我的错。非常愚蠢的一个。

如果您忘记了文件名中的.blade扩展名,则该文件不理解blade,而是运行PHP代码。你应该使用

/resources/views/filename.blade.php

而不是

/resources/views/filename.php

希望这能帮助到一些人

你可以使用以下三种方法首先使用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 ..

{!! $text !!}


{!! html_entity_decode($text) !!}

试试这个,它很有效:

@php
echo $text;
@endphp
如果你有时使用Bootstrap折叠类{!! $text !!} 不是为我工作,但\{\{ html_entity_decode($text) }}为我工作。< / p >

为了进一步解释,Blade \{\{ }}语句中的代码会自动通过php提供的htmlspecialchars()函数传递。这个函数接受一个字符串,并将找到HTML使用的所有保留字符。保留字符为& < >"。然后,它将用它们的HTML实体变体替换这些保留字符。它们是:

|---------------------|------------------|
|      Character      |       Entity     |
|---------------------|------------------|
|          &          |       &amp;      |
|---------------------|------------------|
|          <          |       &lt;       |
|---------------------|------------------|
|          >          |       &gt;       |
|---------------------|------------------|
|          "          |       &quot;     |
|---------------------|------------------|

例如,假设我们有下面的php语句:

$hello = "<b>Hello</b>";

作为\{\{ $hello }}传递给blade会产生你传递的字面值字符串:

<b>Hello</b>

在引擎盖下,它实际上会回显为&lt;b&gt;Hello&lt;b&gt

如果我们想绕过它并实际将其呈现为粗体标记,则通过添加blade提供的转义语法来转义htmlspecialchars()函数:

{!! $hello !!}

注意,我们只使用了一个大括号。

上述结果将产生:

你好

我们还可以利用php提供的另一个方便的函数,即html_entity_decode()函数。这将把HTML实体转换为它们所尊重的HTML字符。可以把它看作是htmlspecialchars()的反向

例如,我们有如下的php语句:

$hello = "&lt;b&gt; Hello &lt;b&gt;";

现在,我们可以将这个函数添加到转义的blade语句中:

{!! html_entity_decode($hello) !!}

这将获取HTML实体&lt;并将其解析为HTML代码<,而不仅仅是字符串。

这同样适用于大于&gt;的实体

这就会产生

你好

首先,逃避的全部意义在于避免XSS攻击。因此,在使用转义语法时要非常小心,特别是如果应用程序中的用户自己提供HTML,他们可以根据自己的需要注入自己的代码。

在控制器。

$your_variable = '';
$your_variable .= '<p>Hello world</p>';


return view('viewname')->with('your_variable', $your_variable)

如果你不希望你的数据被转义,你可以使用下面的语法:

{!! $your_variable !!}

输出

Hello world

默认情况下,Blade \{\{ }}语句会自动通过PHP的htmlspecialchars函数发送,以防止XSS攻击。如果你不希望你的数据被转义,你可以使用下面的语法:

根据医生,你必须在你的Blade文件中渲染你的html:

{!! $text !!}

在回显应用程序用户提供的内容时要非常小心。在显示用户提供的数据时,通常应该使用转义的双花括号语法来防止XSS攻击。

当您的数据包含HTML标记时,请使用

{!! $text !!}

当您的数据不包含HTML标记时,请使用

\{\{ $text }}

{! !!!}是不安全

阅读这里:https://laravel.com/docs/5.6/blade#displaying-data

你可以试试:

    @php
echo $variable;
@endphp