HTML和Ruby on Rails-显示<;br/>;标记为换行符,但其他标记为字符串

HTML和Ruby on Rails-显示<;br/>;标记为换行符,但其他标记为字符串,html,ruby-on-rails,ruby,line-breaks,Html,Ruby On Rails,Ruby,Line Breaks,我正在开发我的第一个Rails网站,但我有一个小问题:我想将标记显示为换行符,但我也想将其他标记显示为字符串 例如,用户输入为: <a href='#2'>Go to #2</a><br/><a href='#3'>Go to #3</a> 我想展示: <a href='#2'>Go to #2</a><a href='#3'>Go to #3</a> 我知道我可以将标记显示为换行符,如下所示: <%= simple_format

我正在开发我的第一个Rails网站,但我有一个小问题:我想将
标记显示为换行符,但我也想将其他标记显示为字符串

例如,用户输入为:

<a href='#2'>Go to #2</a><br/><a href='#3'>Go to #3</a>
我想展示:

<a href='#2'>Go to #2</a>
<a href='#3'>Go to #3</a>
我知道我可以将
标记显示为换行符,如下所示:

<%= simple_format @user_input %> 但问题是此命令显示:

Go to #2
Go to #3 转到#2
转到#3 而不是:

<a href='#2'>Go to #2</a>
<a href='#3'>Go to #3</a>

提前谢谢你

使用Rails sanitize helper方法,将您希望允许的标记列为白名单,将不允许的标记保留在外。所有遗漏的内容将被剥离并显示为文本。所以在你的情况下会是这样的

<%= sanitize @user_input, tags: %w(br) %>


有关净化方法api信息,请参见。

您可以执行以下操作:

<% @user_input.split("<br/>").each do |line| %>
  <%= line %><br/>
<% end %>
<%= @input.css('body').children.to_s.gsub("&lt;", "<").gsub("&gt;", ">") %>
现在,您只需将其添加到视图中:

<div class="new-lines">
  <%= @user_input.css('body').children %>
<div>
是的,有一个小警告,因为原来的
value='
'
变成了
value=“br/”
,但我希望这不是一个大问题;但如果是的话,你可以这样做:

<% @user_input.split("<br/>").each do |line| %>
  <%= line %><br/>
<% end %>
<%= @input.css('body').children.to_s.gsub("&lt;", "<").gsub("&gt;", ">") %>

以及输出:


对于更多的边缘情况,您可能需要进一步增强此代码,但我认为这个示例可以做到这一点


也考虑使用助手,而不是在控制器/VIEW中抛出所有代码。

它改变了行中断中的
标记,但是其他HTML标记不显示到屏幕上。是的,SuniTIZE方法通过不显示它,除了白名单外,根本不显示HTML。没有一个Rails帮助程序可以转义并仅显示一些html标记,而呈现其他标记。你必须为此做一些Ruby技巧。Gerry下面的答案是可行的,只是尝试一下。你不能依赖正则表达式或使用

作为分隔符。如果字符序列

实际上不是HTML标记,例如
@meagar是的,您是对的,对于边缘情况,最好解析HTML并从那里开始工作。Nokogiri可能很方便,因为它已经包含在rails中了。我将发布一个更新以涵盖该场景。
<div class="new-lines">
  <%= @user_input.css('body').children %>
<div>
<%= @input.css('body').children.to_s.gsub("&lt;", "<").gsub("&gt;", ">") %>