如何从转义尖括号中停止auto_link?

时间:2011-07-05 14:37:38

标签: ruby-on-rails hyperlink escaping

我希望我的应用允许用户在帖子中发布链接,并自动识别这些链接。为此,我一直在使用auto_link:以下是调用显示一个人帖子的部分:

_post.html.erb:

 <tr>
     <td >
    <span class="post_header"><h4><%= link_to "#{post.user.first_name} #{post.user.last_name}", post.user %></h4></span>
    <p> <%= auto_link(post.content) %> </p>
    <span class="post_timestamp">
        Opined <%= time_ago_in_words(post.created_at) %> ago
    </span>
     </td>
 </tr>

对于单个post.content:

输出以下内容
 <p> Wondering if this link &lt;a href=&quot;http://www.economist.com/blogs/freeexchange&quot;&gt;http://www.economist.com/blogs/freeexchange&lt;/a&gt; will become a proper link

为什么自动链接创建/转义尖括号到&lt; a等?有没有办法解决这个问题,因为这不会创建工作链接。相反,浏览器中的输出是:

 Wondering if this link <a href="http://www.economist.com/blogs/freeexchange">http://www.economist.com/blogs/freeexchange</a> will become a proper link

3 个答案:

答案 0 :(得分:4)

在Rails 3中,erb默认不允许任何ruby输出包含html。要解决此问题,您可以使用"some string".html_safe

<%= auto_link(post.content).html_safe %>

但当然任何html或javascript都会被允许。所以......

<%= sanitize(auto_link(post.content).html_safe) %>

答案 1 :(得分:1)

请注意,使用Rails 3.1删除了auto_link。

有关替代解决方案,请参阅this answer

答案 2 :(得分:0)

tybro0103的解决方案有效,但如果您只想将链接作为正确的HTML,则需要

sanitize(auto_link(post.content).html_safe,tags:'a')