2010-12-15 22 views
3

我在Rails中有一個RHTML視圖,輸出來自我的MongoDB集合。使用迭代塊可以正確輸出數據,但每當我嘗試在我的數據庫中使用HTML標記時,它們都不會呈現在HTML輸出中,而只是顯示它們。在輸出上顯示HTML標籤的RHTML

<% 
@posts.find().each do |post| 
%> 
<h1><%=post["name"]%></h1> 
<p><%=post["body"] %></p> 
<p><%=post["timestamp"]%></p> 
<% 
end 
%> 

但是,舉例來說,如果我有

<p>Test</p> 

在我的數據庫中,標籤將呈現,而不是打印。

+0

你不應該需要找到'()'@posts – 2010-12-15 13:27:06

+0

後,如果@posts是他收集對象 – 2010-12-15 13:30:05

回答

6

這是現在內置於Rails 3中的安全預防措施。它可以防止XSS(跨站點腳本)問題。

如果你添加raw你會得到你想要的輸出。

<% @posts.each do |post| %> 
<h1><%=raw post["name"]%></h1> 
<p><%=raw post["body"] %></p> 
<p><%=raw post["timestamp"]%></p> 
<% end %> 

但是,如果要存儲用戶創建任意的HTML,我不建議你這樣做,除非你是存儲在數據庫中之前消毒的輸入。

編輯:

另一種選擇:代替raw使用sanitize helper,例如<%=sanitize post["name"], :tags => "p" %>允許<p>標籤。