【问题标题】:Rails: array.join with html in separator is escapedRails:array.join 在分隔符中带有 html 被转义
【发布时间】:2012-03-06 12:55:18
【问题描述】:

我有一个包含未保存内容(用户输入)的字符串数组。

我想在我的模板中加入这些字符串,以<br /> 分隔。

我试过了:

somearray.join("<br />")

但这也会逃脱分隔符。

是否有解决方法,请记住绝对必须转义数组的内容?

【问题讨论】:

  • 你试过 somearray.join("
    ".html_safe) 吗?
  • 是的,它仍在被转义。
  • 是的,应该作为字符串的一部分是不安全的。那么整个字符串就被认为是不安全的。
  • 找到了以下解决方法:simple_format(somearray.join("\r\n")),但我认为一定有更好的解决方案
  • 另一种解决方法:h(somearray.join("\r\n")).gsub("\r\n","&lt;br /&gt;")

标签: ruby-on-rails html-escape


【解决方案1】:

它必须是&lt;br /&gt; 标签有什么原因吗?你能用一个列表来代替吗?

<ul>
  <% somearray.each do |item| %>
    <%= content_tag :li, item %>
  <% end %>
</ul>

【讨论】:

  • 不完全是我想要的,但它会达到我的目的。谢谢。
【解决方案2】:

你试过了吗?

raw somearray.join("<br />")

【讨论】:

  • 请注意,这也会信任数组元素。
【解决方案3】:

rawh 提供有选择地应用此默认行为的方法。

<%= raw user_values_array.map {|user_value| h user_value }.join('<br />') %>

更好的是,Rails 3.1 为此引入了safe_join(array, sep)。与html_safe 一起使用,可以满足您的需求。

<%= safe_join(user_values_array, "<br />".html_safe) %>

Documentation

【讨论】:

  • 你也可以使用tag helper,像这样:safe_join(somearray.split('\\n'), tag(:br))
猜你喜欢
  • 2011-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-13
相关资源
最近更新 更多