Rails – 在文本区域添加换行符
我有一个rails应用程序,我可以在我的模型中input几段文字。 问题是我不知道如何input任何换行符。
我试着添加“{ln} {/ ln}; {&nbsp}和{br} {/ br}”,但只显示html文本并且没有中断。
有没有反正我可以设置它,所以文本区域控件将使用任何我在模型条目中放置的html?
有什么我可以input的,所以铁轨会认出,嘿在这里放了一条线?
问题不在于编辑它的价值,因为它在稍后渲染。 要在textarea中编辑新值时添加换行符,只需按回车键即可。 稍后再重新编辑该值时,空白符仍然应该在那里。
渲染空白是棘手的部分。 在HTML中,空白通常是微不足道的。 像浏览器使用的渲染器将为任何连续的空白string显示一个空格。 所以仅仅把价值倾销到页面上是不够的:
<%= obj.description %>
即使您的价值可能是"One \t \n \n Two"
,它会在屏幕上显示为"One Two"
。
为了让这些新的行字符在显示时真正将行分开,您需要在呈现之前将它们转换为HTML:
<%= obj.description.gsub(/\n/, '<br/>') %>
当然,如果用户正在input将包含在HTML中的数据,则应该避开值来防止XSS 。 如果新线是你需要支持的唯一的东西,它应该像这样简单:
<%= h(obj.description).gsub(/\n/, '<br/>') %>
如果你想允许更复杂的格式,看看Markdown和Textile (这两个Rails提供了辅助视图方法)。 只要确定调查是否提供了XSS预防的支持。
textareas中的换行符产生为\ n。 但是,问题是,如果您只是将其转储到您的视图,它将只是在HTML源代码中的换行符。
你可以尝试使用Rails的simple_format
帮助器来为你处理这个问题: http : simple_format
它会自动将换行符转换为HTML标签。 你可以像<%= simple_format(my_text_field) %>
一样使用它。
保持用户input未修改,并添加到您的CSS:
white-space: pre-line;
它将在用户input中显示\ r或\ n(input)作为新行。
这是另一种在string中显示换行符的方法,同时仍然逃脱文本的其余部分:
<%= safe_join(@object.textarea_input.split("\r\n"), "<br />".html_safe) %>
<%=raw text_area_tag :keywords, keywords, :rows => 8 %>
simple_format
的问题是,它也添加了其他标签,如<b><i><hr><h1>
…
如果你只是想换行没有其他标签,我build议你build立一个部分(让我们叫line_break):
<% text.split("\n").each do |t| %> <%= t %><br> <% end %>
那么,只需从您的视图中调用它:
<%= render partial: 'line_break', locals: {text: some_text} %>
你使用什么版本的导轨? 因为处理这个的方法在第二和第三轨道中是不同的。
假设logging的值是"foo<br />bar"
在rails 3中,如果你想评估html,你可以执行<%=raw "foo<br />bar" %>
,如果你这样做的话,你会看到一个换行符。
在rails 2中,你不需要这么做,只需要执行<%= "foo<br />bar" %>
而且,HTML不会在textarea中被评估。
\n
如果记忆服务(它今天没有做得很好…尝试在你自己的风险大声笑)
编辑:假设你正在谈论一个textarea
,如果它是简单的输出,只需使用<br>
如果你只是在视图中显示你的string。 然后尝试一下
< p >This is my text< / p >< br />
上面的答案是好的:
-
gsub
(@Ian)运行良好 - @Aaron指出,
simple_format
(@Karl)稍微超出了顶层,将所有内容包装在<p>
所以我调整如下:
simple_format(value, {}, wrapper_tag: 'div')