你可以做这样的事情:
<% @user_input.split("<br/>").each do |line| %>
<%= line %><br/>
<% end %>
输出:
<a href='#2'>Go to #2</a>
<a href='#3'>Go to #3</a>
甚至更好,使用正则表达式,所以你可以拆分或者<br>
或<br/>
:
<% @user_input.split(/<br\/>|<br>/).each do |line| %>
<%= line %><br/>
<% end %>
UPDATE
有些情况下会失败,并在上面的方法,例如:
<input type="text" value="<br/>">
为了能够处理这些情况下,您可以使用引入nokogiri,已经与轨捆绑在一起,但你需要添加代码中的几个额外步骤。
首先,你的控制器:
def some_action
input = "<a href='#2'>Go to #2</a><br/><a href='#3'>Go to #3</a><br><input type='text' value='<br/>'>"
@user_input = Nokogiri::HTML.parse(input)
@user_input.search('br').each { |br| br.replace("\n") }
end
基本上,你将创建一个引入nokogiri HTML文档,并与"\n"
替换所有br
标签。
二,创建css
类使用这些"\n"
的断裂线:
.new-lines {
white-space: pre-line
}
现在,您将只需添加到您的视图:
<div class="new-lines">
<%= @user_input.css('body').children %>
<div>
注意使用class="new-lines"
,这是重要的是使每个"\n"
充当<br>
。
和输出:
<a href="#2">Go to #2</a>
<a href="#3">Go to #3</a>
<input type="text" value="<br/>">
是的,有一个小警告由于原value='<br>'
变成value="<br/>"
,但我希望这不是一个大问题;但如果是,那么你可以做这样的事情:
<%= @input.css('body').children.to_s.gsub("<", "<").gsub(">", ">") %>
和输出:
<a href="#2">Go to #2</a>
<a href="#3">Go to #3</a>
<input type="text" value="<br/>">
您可能需要进一步加强这方面的代码更边缘情况,但我认为这个例子将做的伎俩。
也可以考虑使用帮手而不是将所有的代码放在你的控制器/视图中。
您不能依赖正则表达式或使用'
'作为分隔符。如果字符序列“
”实际上不是一个HTML标记,例如'”>',那么这将失败。 – meagar
@meagar是的,你说得对,对于边缘情况,解析HTML并从那里开始工作会更好。 _Nokogiri_可能会很方便,因为它已经包含在rails中。我将发布更新以涵盖该场景。 – Gerry
@ AHWD777检查边缘病例的更新答案。 – Gerry