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.PHPecho()
正确显示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 |
|---------------------|------------------|
| & | & |
|---------------------|------------------|
| < | < |
|---------------------|------------------|
| > | > |
|---------------------|------------------|
| " | " |
|---------------------|------------------|
在引擎盖下,它实际上会作为bHellob>
如果我们想绕过此选项并实际将其呈现为粗体标记,我们可以通过添加转义语法blade来转义htmlspecialchars()
函数:
{!!$hello!!}
请注意,我们只使用一个大括号
上述的产出将产生:
你好
我们还可以使用php提供的另一个方便的函数,即html\u entity\u decode()
函数。这将把html实体转换为它们所尊重的html字符。可以将其视为htmlspecialchars()
例如,假设我们有以下php语句:
$hello = "<b>Hello</b>";
$hello = "<b> Hello <b>";
{!! html_entity_decode($hello) !!}
现在,我们可以将此函数添加到转义的blade语句中:
$hello = "<b>Hello</b>";
$hello = "<b> Hello <b>";
{!! 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!!}
回显应用程序用户提供的内容时要非常小心。通常应使用转义的双大括号语法