我有一个rails应用程序,我可以在我的模型中输入几段文字。问题是我不知道如何输入任何换行符。
我尝试添加“{ln} {/ ln}; {& nbsp}和{br} {/ br}”,但这只会将html显示为文字而不会中断。
无论如何我可以设置它以便文本区域控件将使用我在模型条目中放置的任何html吗?
有什么东西我可以输入,所以rails会识别,嘿,在这里放一条线?
答案 0 :(得分:105)
textareas中的换行符产生为`\ n'。但问题是,如果您只是将其转储到视图中,它只会是HTML源代码中的换行符。
您可以尝试使用Rails simple_format
帮助程序来处理其中的一些问题:http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#M002285
它会自动将换行符转换为HTML标记。您可以使用类似<%= simple_format(my_text_field) %>
的内容。
答案 1 :(得分:83)
问题不在于编辑值,而是在稍后渲染它。要在textarea中编辑换行符时在其值中添加换行符,只需按返回键即可。稍后重新编辑该值时,空格应该仍在那里。
渲染空白是一个棘手的部分。在HTML中,空格通常是微不足道的。像浏览器使用的渲染器将为任何连续的空格字符串显示单个空格。所以仅仅将值转储到页面上是不够的:
<%= obj.description %>
即使您的值可能为"One \t \n \n Two"
,它也会在屏幕上显示为"One Two"
。
要让这些新行字符在显示时实际分隔行,您需要在呈现之前将它们转换为HTML:
<%= obj.description.gsub(/\n/, '<br/>') %>
当然,如果用户输入的数据将包含在您的HTML中,您应该转义这些值以防范XSS。如果您需要支持新行,则应该如此简单:
<%= h(obj.description).gsub(/\n/, '<br/>') %>
如果您想允许更复杂的格式化,请查看Markdown和Textile(这两个Rails都提供了帮助视图方法)。请务必调查他们为XSS预防提供的支持。
答案 2 :(得分:20)
保持用户输入不变,并将其添加到您的css:
white-space: pre-line;
它将在用户输入中将\ r或\ n(输入)显示为新行。
答案 3 :(得分:8)
这是另一种显示字符串换行符的方法,同时仍然可以转义文本的其余部分:
<%= safe_join(@object.textarea_input.split("\r\n"), "<br />".html_safe) %>
答案 4 :(得分:1)
您使用的是什么版本的导轨?因为处理这个问题的方法在第2和第3栏中是不同的。
假设记录的值为"foo<br />bar"
在rails 3中,如果你想评估html,你可以<%=raw "foo<br />bar" %>
,如果这样做,你会看到视图时会有换行符。
在rails 2中,您不必这样做,只需执行<%= "foo<br />bar" %>
此外,无论如何都不会在textarea中评估HTML。
答案 5 :(得分:1)
<%=raw text_area_tag :keywords, keywords, :rows => 8 %>
答案 6 :(得分:1)
simple_format
的问题在于它还添加了其他标签,例如<b><i><hr><h1>
...
如果你只是想要没有其他标签的换行符,我建议你构建一个部分(让我们称之为line_break):
<% text.split("\n").each do |t| %>
<%= t %><br>
<% end %>
然后,只需从您的视图中调用它:
<%= render partial: 'line_break', locals: {text: some_text} %>
答案 7 :(得分:0)
\n
如果记忆服务的话(今天一直没那么好......试试你自己的风险大声笑)
编辑:假设您在谈论textarea
,如果是简单输出,只需使用<br>
答案 8 :(得分:0)
上面的答案很好:
gsub
(@Ian)运作良好simple_format
(@Karl)有点过头,因为@Aaron指出,将所有内容包装在<p>
所以我调整如下:
simple_format(value, {}, wrapper_tag: 'div')
答案 9 :(得分:0)
其他答案是错误的。文本区域不会在换行时呈现
,因为TEXTAREA元素的innerHTML值不会呈现HTML。
您需要添加换行HTML实体:
示例:
<textarea><%= "LINE 1 LINE 2 LINE 3".html_safe %></textarea>
答案 10 :(得分:-1)
如果您只是在视图中显示字符串。然后尝试
< p >This is my text< / p >< br />