对于要建立的网站,我有一个简单的RSS提要。我想为帖子做一个阅读更多链接,并将输出限制为300个字符。我的代码如下:
<p id="notice"><%= notice %></p>
<h1 class="reviews">What They're Saying About Us</h1>
<br />
<h1 class="post-title"><%= image_tag("icons8-rss-40.png") %>RSS Feed</h1>
<% @home_blogs.each do |p| %>
<div class="blog-posts">
<h3><%= p.name %></h3> | <%= p.created_at.to_date %>
<br />
<p id="blog_post_content">
<% if p.entry.length > 200 %>
<%= truncate(p.entry, length: 300).html_safe %>
<%= link_to "...read more", p %>
<% else %>
<%= p.entry.html_safe %>
</p>
<% end %>
<br />
<%= image_tag("if__hashtag_2559811.png")%>Tag Cloud
<div class="tag-cloud">
</div>
</div>
<% end %>
<span class="pagination"><%= will_paginate @home_blogs %></span>
<br>
无论出于什么原因,即使我正在执行html_safe,我创建帖子时仍会包含html标签。有任何想法吗?谢谢
答案 0 :(得分:1)
truncate
自动将输出标记为html_safe
,并且默认情况下也转义内容。这意味着您甚至有机会自己将链接标记为html_safe
之前,您的链接可能已被转义。
您可以将escape: false
选项传递给truncate
,以使其跳过默认情况下的转义。
例如
<%= truncate(p.entry, length: 300, escape: false) %>
结果被标记为HTML安全的,但默认情况下将其转义,除非:escape为false。如果文本包含HTML标记或实体,则应格外小心,因为截断可能会产生无效的HTML(例如不平衡或不完整的标记)。