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

cna*_*reu 5 ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

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

<a href=http://bugtracker.com/bug/1234>b1234</a>
Run Code Online (Sandbox Code Playgroud)

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

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

它输出:

=> "I fixed <a href=http://bugtracker.com/bug/1234>b1234</a> today" 
Run Code Online (Sandbox Code Playgroud)

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

<%= post.content %>
Run Code Online (Sandbox Code Playgroud)

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

如果我做:

<%= post.content.gsub(...) %>
Run Code Online (Sandbox Code Playgroud)

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

&lt;a href= ... instead of <a href= ...
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢!

d11*_*wtq 4

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

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

<%== h(post.content).gsub(...) %>
Run Code Online (Sandbox Code Playgroud)