5

我的目标是在段落中找到类似“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 方法?

谢谢!

4

1 回答 1

4

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

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

<%== h(post.content).gsub(...) %>
于 2012-06-03T03:06:38.540 回答