我有一个字符串返回到我的一个视图,像这样:
$text = '<p><strong>Lorem</strong> ipsum dolor <img src="images/test.jpg"></p>'
我试图用Blade显示它:
{{$text}}
但是,输出是一个原始字符串,而不是呈现的HTML。我如何显示HTML与刀片在Laravel?
PS. PHP echo()正确显示HTML。
我有一个字符串返回到我的一个视图,像这样:
$text = '<p><strong>Lorem</strong> ipsum dolor <img src="images/test.jpg"></p>'
我试图用Blade显示它:
{{$text}}
但是,输出是一个原始字符串,而不是呈现的HTML。我如何显示HTML与刀片在Laravel?
PS. PHP echo()正确显示HTML。
当前回答
如果你有时使用Bootstrap折叠类{!!美元的文本! !} 不是为我工作,但{{html_entity_decode($text)}}是为我工作。
其他回答
默认情况下,Blade{{}}语句通过PHP的htmlspecialchars函数自动发送,以防止XSS攻击。如果你不希望你的数据被转义,你可以使用下面的语法:
根据文档,你必须做以下事情来在你的Blade文件中渲染你的html:
{!! $text !!}
在回显应用程序用户提供的内容时要非常小心。在显示用户提供的数据时,通常应该使用转义的双花括号语法来防止XSS攻击。
试试这个。这对我很管用。
{{ html_entity_decode($text) }}
在Laravel Blade模板中,{{}}将转义html。如果你想在视图中显示来自控制器的html, decode html from string。
请使用
{!! $test !!}
只有在HTML的情况下,而如果你想呈现数据,sting等使用
{{ $test }}
这是因为在编译刀片文件时
{{$test}}被转换为<?PHP echo e($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时要负责任。
如果你有时使用Bootstrap折叠类{!!美元的文本! !} 不是为我工作,但{{html_entity_decode($text)}}是为我工作。