RHTML отображает HTML-теги на выходе - PullRequest
3 голосов
/ 15 декабря 2010

У меня есть RHTML-представление в Rails, откуда выводится из моей коллекции MongoDB.Данные выводятся правильно с использованием итерационного блока, но всякий раз, когда я пытаюсь добавить теги HTML в свою базу данных, они не отображаются в выводе HTML, а просто отображаются.

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

Но, например,, если бы в моей базе данных было

<p>Test</p>

, теги будут отображаться вместо печати. ​​

Ответы [ 2 ]

6 голосов
/ 15 декабря 2010

Это мера безопасности, которая теперь встроена в 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, созданный пользователем, я не рекомендую вам делать это, если вы не санируете ввод перед сохранением его в базе данных.

Редактировать:

Другой вариант: использование помощника sanitize вместо raw, например <%=sanitize post["name"], :tags => "p" %>, чтобы разрешить <p> теги.

2 голосов
/ 15 декабря 2010

Помимо raw и .html_safe, которые обеспечивают 100% доверие к вводу пользователя, вы также можете использовать sanitize, чтобы ограничить только количество разрешенных тегов.

<% = sanitizepost ["name"] $>

Подробнее см .: http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html

...