2014-09-24 26 views
35

im在laravel中构建一个小型CMS,并且每次尝试显示存储在数据库中的内容时,它都显示HTML标记而不是执行它们,就像所有打印的HTML_entity_decode一样数据laravel转义刀片模板中的所有HTML

<?php 
class CmsController extends BaseController{ 
    public function Content($name){ 

     $data = Pages::where('CID','=',Config::get('company.CID'))->where('page_name','=',$name)->first(); 
     return View::make('cms.page')->with('content', $data); 
    } 
} 
?> 

我试图打印的内容使用大括号

{{$content->page_desc}} 

和三重大括号

{{{$content->page_desc}}} 

,他们给了相同的结果
我需要执行这些HTML标签,而不是逃避它们

+1

在最新版本的ver-5.0' {{...}}和'{{...}}}都是这样做的,你准确的版本是什么? – 2014-09-24 18:22:46

+0

即时通讯使用4.2版 – 2014-09-24 18:24:32

+0

然后我不知道为什么'{{...}}'给出逃脱的结果! – 2014-09-24 18:26:32

回答

2

没有与刀片模板显示HTML代码没有问题的。

对于测试,您可以添加到routes.php文件只有一个途径:

Route::get('/', function() { 

     $data = new stdClass(); 
     $data->page_desc 
      = '<strong>aaa</strong><em>bbb</em> 
       <p>New paragaph</p><script>alert("Hello");</script>'; 

     return View::make('hello')->with('content', $data); 
    } 
); 

hello.blade.php文件:

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
</head> 
<body> 

{{ $content->page_desc }} 

</body> 
</html> 

对于下面的代码,你会得到输出图像

Output

那么可能page_desc在你的情况下不是你所期望的。但是,正如你看到的,如果有人使用了例如“`标签也可以是潜在的危险,所以你或许应该在分配给刀片模板过滤一些标签

编辑

我也测试了它之前,你的路线把相同的代码输入数据库:

Route::get('/', function() { 

     $data = User::where('id','=',1)->first(); 

     return View::make('hello')->with('content', $data); 
    } 
); 

输出也正是在这种情况下,同样的

EDIT2

我也不知道Pages是您的型号还是供应商型号。例如,它可以有内部访问:

public function getPageDescAttribute($value) 
{ 
    return htmlspecialchars($value); 
} 

,然后当你得到page_desc属性,你会得到与htmlspecialchars修改page_desc。所以,如果你确信数据库中的数据是与原始html(不逃脱),你应该看看这个Pages

+0

现在测试谢谢 – 2014-09-24 19:38:56

-3

{{html_entity_decode($ post-> content())}}用Laravel 4.0保存了我的问题。现在我的HTML内容被解释为它应该。

+0

是的,这个解决方案实际上适用于laravel 4 - 也许有人知道更好的L4解决方案? – 2017-03-07 16:33:35

+0

由于我们使用laravel,我们应该使用{!! !!},它遵循Laravel语法。 – Nick 2017-05-30 16:20:49

88

将您的语法从{{ }}更改为{!! !!}。由于Alpha在上面的评论中表示(不是我认为我会发布的答案),所以在Laravel 5中,{{ }}(以前的非转义输出语法)已更改为{!! !!}。将{{ }}替换为{!! !!},它应该可以工作。

+0

解决我的情况! – fpauer 2016-03-19 21:35:00

+1

工作!谢谢@Alpha – 2016-04-15 11:37:23

+0

为我工作!!!谢谢@Ivan Topolcic – Raham 2016-06-06 07:54:11

7

将内容包含在{! !}。

10

使用该标签{!描述文字!!}

+0

这个答案适用于我在Laravel 5.2中。在处理这个问题的过程中,我还发现如果不使用这种语法,Illuminate/Support/helpers.php :: 529会运行'htmlentities()':'{!! !}'。 – PapaHotelPapa 2016-03-28 20:50:35

1

我有同样的问题。感谢上面的答案,我解决了我的问题。如果有面临同样的问题的人,这里是解决它双向:

  • 您可以使用{!! $news->body !!}
  • 您可以使用传统的PHP开通(不推荐),如:<?php echo $string ?>

我希望它有帮助。