Laravel:使用Blade显示HTML

Laravel:使用Blade显示HTML,laravel,laravel-5,laravel-blade,Laravel,Laravel 5,Laravel Blade,我的一个视图返回了一个字符串,如下所示: $text = '<p><strong>Lorem</strong> ipsum dolor <img src="images/test.jpg"></p>' public function getProductDescription() { return new HtmlString($this->description); } 但是,输出是原始字符串,而

我的一个视图返回了一个字符串,如下所示:

$text = '<p><strong>Lorem</strong> ipsum dolor <img src="images/test.jpg"></p>'
public function getProductDescription()
{
    return new HtmlString($this->description);
}
但是,输出是原始字符串,而不是呈现的HTML。如何在Laravel中使用Blade显示HTML

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

您需要使用

{!! $text !!}
使用
{{$text}}

时,字符串将自动转义。您可以尝试以下操作:

{!! $text !!}
您应该看看:laravel 5的

{!!html_entity_decode($text)!!}

通过这一点,请参见RachidLaasri的答案

试试这个。这对我有用

{{ html_entity_decode($text) }}
在Laravel刀片模板中,{{}将转义html。如果要在视图中显示控制器中的html,请从字符串中解码html。

请使用

{!! $test !!} 
仅在HTML的情况下,如果要呈现数据,请使用

{{ $test }}
这是因为编译刀片文件时

{{$test}
转换为


{!!$test!!}
转换为

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

然后您可以从blade渲染该对象,如下所示:
{{$someObject}
(注意,不需要
{!!!!}
语法)

另外,如果您想返回html属性,并且知道它将是html,请使用如下类:

$text = '<p><strong>Lorem</strong> ipsum dolor <img src="images/test.jpg"></p>'
public function getProductDescription()
{
    return new HtmlString($this->description);
}
然后像
{{$product->getProductDescription()}}
一样使用它


当然,在页面上直接呈现原始html时要负责。

如果您想避免使用数据

{{ $html }}
{!! $html !!}
如果不想逃避数据的使用

{{ $html }}
{!! $html !!}
但在拉威尔4号之前你可以用

{{ HTML::link('/auth/logout', 'Sign Out', array('class' => 'btn btn-default btn-flat')) }}
什么时候到拉威尔5号

{!! HTML::link('/auth/logout', 'Sign Out', array('class' => 'btn btn-default btn-flat')) !!} 
您也可以使用PHP函数来实现这一点

{{ html_entity_decode($data) }}
浏览PHP文档以了解此函数的参数


您可以使用{!!$text!!}在Laravel中呈现HTML代码

{!! $text !!}
如果你使用

{{ $text }}
它不会呈现HTML代码并以字符串形式打印。

这是一个简单的问题

{!! $text !!}

laravel编译为dom元素,并
{{$text}
打印为字符串

使用
{!!$text!!}
显示数据而不转义它。只需确保不要对来自用户且尚未清理的数据执行此操作

这适用于Laravel 5.6

<?php echo "$text"; ?>
它不会呈现HTML代码并以字符串形式打印


有关更多详细信息,请打开链接:-

以了解在textarea中使用tinymce和标记的用户:

{{ htmlspecialchars($text) }}

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

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

/resources/views/filename.blade.php
而不是

/resources/views/filename.php

希望这对某些人有所帮助,如果情况如下,您可以使用三种方法首先使用

{!! $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>

@如果($order->status='0')
不活跃的
@否则
活跃的
@恩迪夫
三元算子在叶片上的第三种正确使用方法

<td class="nowrap">
      {!! $order->status=='0' ? 
          '<button class="btn btn-danger">Inactive</button> : 
          '<button class="btn btn-success">Active</button> !!}
</td>

{!!$order->status='0'?
“非活动:
'活动!!}

我希望第三种方法对于刀片上使用的三元运算符是完美的。

在laravel 5中可以使用多种方法

{!! $text !!}

{!! html_entity_decode($text) !!}
试试这个,效果很好:

@php 
   echo $text; 
@endphp

如果您有时使用引导折叠类
{!!$text!!}

不适用于我,但
{{html\u entity\u decode($text)}
适用于我

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

|---------------------|------------------|
|      Character      |       Entity     |
|---------------------|------------------|
|          &          |       &amp;      |
|---------------------|------------------|
|          <          |       &lt;       |
|---------------------|------------------|
|          >          |       &gt;       |
|---------------------|------------------|
|          "          |       &quot;     |
|---------------------|------------------|
在引擎盖下,它实际上会作为
bHellob>

如果我们想绕过此选项并实际将其呈现为粗体标记,我们可以通过添加转义语法blade来转义
htmlspecialchars()
函数:

{!!$hello!!}

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

上述的产出将产生:

你好

我们还可以使用php提供的另一个方便的函数,即
html\u entity\u decode()
函数。这将把html实体转换为它们所尊重的html字符。可以将其视为
htmlspecialchars()

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

$hello = "<b>Hello</b>";
$hello = "&lt;b&gt; Hello &lt;b&gt;";
{!! html_entity_decode($hello) !!}
现在,我们可以将此函数添加到转义的blade语句中:

$hello = "<b>Hello</b>";
$hello = "&lt;b&gt; Hello &lt;b&gt;";
{!! html_entity_decode($hello) !!}

这将获取HTML实体
,并将其解析为控制器上的HTML代码

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

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

Hello world

难以置信的是,有几个相同的答案,结果是错误的

Laravel将纯php代码保存到存储/fremework/view 当然,如果您有数千个视图,则需要一个世纪才能找到您想要的视图,但是打开任何一个视图,都会看到那里有{{$text}现在有{code>
,然后忘记{{$text}}并使用
,但这仍然不是一个好主意,如果陌生人创建了html,那么让我们创建我们的标准:

//Controller 
<?php

 $body = strip_tags($text, '<strong><span><p><b><small><pre><div><br><img><video><a><ul><li><ol><i><font><blockquote>');

return view('myview', compact('body'));
?>
//Blade

<iframe srcdocs="{{print($body)}}" sandbox></iframe>

or

<iframe srcdocs="{{$body}}" sandbox></iframe>
生成配置文件:

{!! $your_variable !!}
在config/purizer.php中更改“HTML.Allowed”

无需进一步操作,只需在blade上调用它,将$body替换为包含html代码的变量

'HTML.Allowed' => 'h1[class],h2[class],h3[class],h4[class],h5[class],div[class],b,strong[style|class],i[class],em,a[href|title|class],ul[style|class],ol[style|class],li[style|class],p[style|class],br,blockquote[class],span[style|class],img[width|height|alt|src|class]',
默认情况下,Blade
{{}
语句通过PHP的
htmlspecialchars
函数自动发送,以防止XSS攻击。如果不希望转义数据,可以使用以下语法:

根据,必须执行以下操作才能在刀片文件中呈现html:

{!!$text!!}
回显应用程序用户提供的内容时要非常小心。通常应使用转义的双大括号语法