2015-09-14 64 views
0

我继续我的博客应用程序的实现,我正在使用markdown(redcarpet gem)创建文章。如何清理博客文章预览HTML实体 - Rails

在我的测试后,但是我有这样的代码

#This is a test post 

`<p> your paragraph text here </p>` 

写在降价。

,并在我的后视图我有这个

<div class="col-md-6"> 
    <% @posts.each do |post| %> 
    <div class="panel panel-default"> 
     <div class="panel-heading"> 
     <h3 class="panel-title"><%= link_to post.title, blog_post_path(post) %></h3> 
     </div> 
     <div class="panel-body"> 
     <%= truncate(strip_tags(post.html), length: 80) %> 
     </div> 
    </div> 
    <% end %> 
</div> 

的事情是,当我想要去除从降价到HTML转换的HTML标签,我在符号<的地方HTML实体>因此,我得到下面的输出

This is a test post &lt;p&gt; your paragraph text here &lt;/p&gt; 

是否有解决方法吗?我会为<,>符号留在这种情况下还是应该只是有一些介绍,只有普通字符。

另外还有一个问题:有没有一种方法来定位我在预览中显示的帖子的哪一部分?

+0

您使用的是哪个版本的Rails?带有最近版本的Rails的'strip_tags'将特殊字符转换为html实体时出现了一个错误。 – MarsAtomic

+0

我正在使用4.2.1。这个版本里面有bug吗? –

回答

1

Rails 4.2引入了HTML清理程序方法的新实现(其中一个是帮助程序strip_tags)。有一次,HTML标记通过正则表达式被删除,Rails 4.2通过使用Nokogiri(通过丝瓜络)实现了同样的事情。

这似乎是一些向后兼容性丢了,因为strip_tagsseems to behave differently under Rails 4.2比以前的版本,所以解决方法是使用sanitize帮手,而不是strip_tags

相反的:

<%= truncate(strip_tags(post.html), length: 80) %> 

使用:

<%= truncate(sanitize(post.html), length: 80) %> 

的助手的sanitize应该使用WhiteListSanitizer,但如果它不工作,你可以尝试直接调用具体方法使用:

<%= truncate(Rails::Html::WhiteListSanitizer.new.sanitize(post.html), length: 80) %> 
相关问题