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

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

我试图用Blade显示它:

{{$text}}

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

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


当前回答

在控制器。

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

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

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

{!! $your_variable !!}

输出

Hello world

其他回答

使用{! !美元的文本! !}来显示数据而不转义。只是要确保不要对来自用户且未被清理的数据执行此操作。

为了进一步解释,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()函数:

{! !$你好! !}

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

上述结果将产生:

你好

我们还可以利用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时,他们可以按照自己的意愿注入自己的代码。

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

{{ html_entity_decode($text) }}

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

试试这个,它很有效:

@php 
   echo $text; 
@endphp

如果你有时使用Bootstrap折叠类{!!美元的文本! !} 不是为我工作,但{{html_entity_decode($text)}}是为我工作。