Ruby on rails rails—在ruby代码中,将HTML元素包装在link_to()的文本周围,而不禁用所有转义

Ruby on rails rails—在ruby代码中,将HTML元素包装在link_to()的文本周围,而不禁用所有转义,ruby-on-rails,ruby-on-rails-5,xss,Ruby On Rails,Ruby On Rails 5,Xss,这是非常基本的,但我在Rails文档中找不到任何东西。有一个视图助手方法(Ruby代码,而不是HAML)返回 link_to(user_controlled_text, destination, options) 我需要在用户控制的文本周围包装一个HTML元素(即)。如果我这样做 link_to("<bdi>#{user_controlled_text}</bdi>", ...) link_to(“#{user_controlled_text},…) 然后,我的元素

这是非常基本的,但我在Rails文档中找不到任何东西。有一个视图助手方法(Ruby代码,而不是HAML)返回

link_to(user_controlled_text, destination, options)
我需要在
用户控制的文本
周围包装一个HTML元素(即
)。如果我这样做

link_to("<bdi>#{user_controlled_text}</bdi>", ...)
link_to(“#{user_controlled_text},…)
然后,我的元素被视为要转义的用户控制文本的一部分。很公平。我如何告诉Rails不要逃避
,但仍然逃避
用户控制的\u文本

尝试
链接到(“{h user\u controlled\u text}.html\u safe,”

如果
h
不起作用,请使用
ERB::Util::h

使用:


我同意前两个答案,如果链接目标很难放入name参数,也可以使用block。我用过下面这样的方法

<%= link_to(destination) do %>
    <bdi>
        <%= user_controlled_text %>
    </bdi>
<% end %>

但我知道这不是一个有效的HTML,例如div在
a href
标记中使用

这是完整的参考资料

<%= link_to(destination) do %>
    <bdi>
        <%= user_controlled_text %>
    </bdi>
<% end %>