2014-09-24 50 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 ?>

我希望它有幫助。