Rails只能逃避某些内容部分

时间:2011-11-29 02:17:37

标签: ruby-on-rails

我希望将所有单词前面的#(即#stackoverflow)转换为一个链接,点击后链接到搜索页面,并将该单词作为查询。

我最近尝试了这个并获得了正确的HTML,但由于内容会自动转义,因此显示为:

This is some content <a href="search?q=something">something</a>

我的问题是:除了这些链接之外,有没有办法只将html_safe应用于内容的每个部分?

1 个答案:

答案 0 :(得分:1)

如果您的代码是简单的字母数字字符串(即不需要HTML或URL编码),那么您可以执行以下操作:

s = ERB::Util.html_escape(text_to_be_linkified).gsub(/#(\w+)/, '<a href="search?q=\1">\1</a>').html_safe

然后s.html_safe?将为真,<%= ... %>将按原样传递结果。如果将其放在视图帮助器中,则ERB::Util.上不需要html_escape前缀。如果您确实需要担心URL或HTML编码,那么您可以适当地修改gsub替换字符串。

例如:

> s = ERB::Util.html_escape('<pancakes & #things').gsub(/#(\w+)/, '<a href="search?q=\1">\1</a>').html_safe
> puts s.html_safe?
true
> puts s
&lt;pancakes &amp; <a href="search?q=things">things</a>