正确的方法来查找模式并替换为Rails视图中的链接

时间:2012-06-03 02:32:55

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2

我的目标是在段落中找到类似'b1234'的内容并将其替换为:

<a href=http://bugtracker.com/bug/1234>b1234</a>

我使用普通红宝石制作了这个:

"I fixed b1234 today".gsub(/(b([0-9]+))/i, '<a href=http://bugtracker.com/bug/\2>\1</a>')

输出:

=> "I fixed <a href=http://bugtracker.com/bug/1234>b1234</a> today" 

我在rails视图中有以下内容:

<%= post.content %>

注意:创建帖子时,我不会在我的数据库中存储HTML链接代码。

如果我这样做:

<%= post.content.gsub(...) %>

我在输出文件中转义了html:

&lt;a href= ... instead of <a href= ...

... 我想要那种行为,我不希望用户发布HTML(iframe会很吓人!)。

但是,我怎么能在不牺牲安全性的情况下获得我想要的查找和替换功能?也许是Javascript方法?

谢谢!

1 个答案:

答案 0 :(得分:4)

加倍等号。 <%== post.content.gsub(...) %>。如果用户也可能在此内容中编写HTML,则您需要Sanitize,以便仅允许指定的HTML标记,例如。

编辑|实际上,如果您要替换的搜索字符串不包含HTML特殊字符,您可以转义字符串,然后执行gsub:

<%== h(post.content).gsub(...) %>