to_sentence和html_safe在一起?

Shp*_*ord 6 sanitization ruby-on-rails ruby-on-rails-3

这是我想要的字符串:

<a href="/pugs/1-baxter">Baxter</a> and <a href="/pugs/2-sofia">Sofia</a>
Run Code Online (Sandbox Code Playgroud)

这是我用来输出的代码:

<%= @pugs.collect {|p| link_to(p.name, pug_path(p))}.to_sentence %>
Run Code Online (Sandbox Code Playgroud)

不幸的是,输出已被编码:

 &lt;a href=&quot;/pugs/1-baxter&quot;&gt;Baxter&lt;/a&gt; and &lt;a href=&quot;/pugs/2-sofia&quot;&gt;Sofia&lt;/a&gt;
Run Code Online (Sandbox Code Playgroud)

我尝试使用html_saferaw,但是它们似乎没有任何影响。

hyn*_*kle 5

从Rails 5开始,有一个to_sentence视图助手(与有所不同Array#to_sentence)来执行此操作。

文档

to_sentence(数组,选项= {})
将数组转换为逗号分隔的句子,其中最后一个元素由连接器词连接。这是ActiveSupport的Array#to_sentence的html_safe意识版本。

像这样使用它: <% to_sentence(@pugs.collect {|p| link_to(p.name, pug_path(p))}) %>


AMI*_*MIT 2

<%= @pugs.collect {|p| link_to(p.name, pug_path(p))}.to_sentence.html_safe %>
Run Code Online (Sandbox Code Playgroud)

  • 这不好。您将整个字符串标记为安全。如果您将 p.name 设置为恶意内容,您会发现您的方法允许它以未转义的方式进入页面。 (5认同)