我正在写博客,作为表格,我使用wysiwyg
froala editor
的宝石。我也缩短了索引页面上的帖子内容,我使用了truncate
方法。问题是.html_safe
方法(应该将编辑表单中的内容显示为html
代码但不显示为纯文本)在与truncate
方法的连接中不起作用。所以,这是代码:
index.html.erb
<% @posts.each do |post| %>
<h3 class="title">
<%= post.title %>
<small class="date">
| <%= post.created_at.strftime('%B, %d, %Y') %>
</small>
</h3>
<p class="fr-view">
<%= truncate(post.content, length: 100).html_safe %>...
<%= link_to ' Read more', post %>
</p>
<% end %>
_form.html.erb
<%= form_for @post, role:"form" do |f| %>
<p>
<%= f.label :title %><br>
<%= f.text_field :title %>
</p>
<div class="form-group">
<%= f.label :content %><br>
<%= f.text_area :content, id:"edit", rows:"3", class:"form-control" %>
</div>
<p>
<%= f.submit 'Create', class:'btn btn-primary' %>
</p>
<% end %>
<script>
$(function() {
$('#edit').froalaEditor()
});
</script>
这是在控制台中为post.content
返回的内容:
Post.find(1)
<Post id: 1, title: "Lorem Ipsum", content: "<p>Lorem ipsum dolor sit amet, consectetur adipisc..."
答案 0 :(得分:1)
问题是你已经颠倒了订单。 html_safe
将字符串标记为受信任,但如果您对其执行其他操作,则不再信任该字符串。这应该有效:
<p class="fr-view">
<%= truncate(post.content, length: 100).html_safe %>
</p>
更新:在评论中讨论了这个问题之后,我认为问题在于,如果您截断,某些代码可能会保持打开状态,这可能会在您的网页中产生各种问题(不一定限于字符串的内容)。有两种选择:
truncate strip_tags(post.content), length: 100
。这也会更加安全,因为您的用户可能会插入恶意代码。作为一般说明,在rails中使用sanitize
代替html_safe
是一种很好的做法,以降低向用户输入的恶意代码发送到浏览器的风险。