我有一个字符串返回到我的一个视图,像这样:
$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。
当前回答
为了进一步解释,Blade{{}}语句中的代码会自动通过php提供的htmlspecialchars()函数传递。这个函数接受一个字符串,并将找到HTML使用的所有保留字符。保留字符为& < >和"。然后,它将用它们的HTML实体变体替换这些保留字符。它们是:
|---------------------|------------------|
| Character | Entity |
|---------------------|------------------|
| & | & |
|---------------------|------------------|
| < | < |
|---------------------|------------------|
| > | > |
|---------------------|------------------|
| " | " |
|---------------------|------------------|
例如,假设我们有下面的php语句:
$hello = "<b>Hello</b>";
作为{{$hello}}传递到blade将产生你传递的字面字符串:
<b>Hello</b>
在引擎盖下,它实际上会回声为<b>Hello<b>
如果我们想绕过它并实际将其呈现为一个粗体标记,我们可以通过添加blade提供的转义语法来转义htmlspecialchars()函数:
{! !$你好! !}
注意,我们只使用了一个大括号。
上述结果将产生:
你好
我们还可以利用php提供的另一个方便的函数,即html_entity_decode()函数。这将把HTML实体转换为它们所尊重的HTML字符。可以把它看作是htmlspecialchars()的反向
例如,我们有如下的php语句:
$hello = "<b> Hello <b>";
现在,我们可以将这个函数添加到转义的blade语句中:
{!! html_entity_decode($hello) !!}
这将把HTML实体<并将其解析为HTML代码<,而不仅仅是字符串。
这同样适用于大于实体>
这就会产生
你好
首先,逃避的全部意义在于避免XSS攻击。因此,在使用转义语法时要非常小心,特别是当应用程序中的用户自己提供HTML时,他们可以按照自己的意愿注入自己的代码。
其他回答
你可以试试这个:
{!! $text !!}
你应该看看:http://laravel.com/docs/5.0/upgrade#upgrade-5.0
为了进一步解释,Blade{{}}语句中的代码会自动通过php提供的htmlspecialchars()函数传递。这个函数接受一个字符串,并将找到HTML使用的所有保留字符。保留字符为& < >和"。然后,它将用它们的HTML实体变体替换这些保留字符。它们是:
|---------------------|------------------|
| Character | Entity |
|---------------------|------------------|
| & | & |
|---------------------|------------------|
| < | < |
|---------------------|------------------|
| > | > |
|---------------------|------------------|
| " | " |
|---------------------|------------------|
例如,假设我们有下面的php语句:
$hello = "<b>Hello</b>";
作为{{$hello}}传递到blade将产生你传递的字面字符串:
<b>Hello</b>
在引擎盖下,它实际上会回声为<b>Hello<b>
如果我们想绕过它并实际将其呈现为一个粗体标记,我们可以通过添加blade提供的转义语法来转义htmlspecialchars()函数:
{! !$你好! !}
注意,我们只使用了一个大括号。
上述结果将产生:
你好
我们还可以利用php提供的另一个方便的函数,即html_entity_decode()函数。这将把HTML实体转换为它们所尊重的HTML字符。可以把它看作是htmlspecialchars()的反向
例如,我们有如下的php语句:
$hello = "<b> Hello <b>";
现在,我们可以将这个函数添加到转义的blade语句中:
{!! html_entity_decode($hello) !!}
这将把HTML实体<并将其解析为HTML代码<,而不仅仅是字符串。
这同样适用于大于实体>
这就会产生
你好
首先,逃避的全部意义在于避免XSS攻击。因此,在使用转义语法时要非常小心,特别是当应用程序中的用户自己提供HTML时,他们可以按照自己的意愿注入自己的代码。
我去过那里,那是我的错。非常愚蠢的一个。
如果您忘记了文件名中的.blade扩展名,则该文件不理解blade,而是运行PHP代码。你应该使用
/resources/views/filename.blade.php
而不是
/resources/views/filename.php
希望这能帮助到一些人
试试这个,它很有效:
@php
echo $text;
@endphp
对于拉拉维尔 5
{!!html_entity_decode($text)!!}
通过这个链接找到答案,见RachidLaasri的答案