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

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

我试图用Blade显示它:

{{$text}}

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

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


当前回答

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

{{ htmlspecialchars($text) }}

其他回答

还有另一种方法。如果对象的目的是渲染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_entity_decode($text) }}

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

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

对于拉拉维尔 5

{!!html_entity_decode($text)!!}

通过这个链接找到答案,见RachidLaasri的答案

在控制器。

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

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

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

{!! $your_variable !!}

输出

Hello world