我有一个rails应用程序,我可以在我的模型中输入几段文字.问题是我不知道如何输入任何换行符.
我尝试添加"{ln} {/ ln}; { }和{br} {/ br}",但这只会将html显示为文本而不会中断.
无论如何我可以设置它,所以文本区域控件将使用我在模型条目中放置的任何html?
有什么东西我可以输入,所以rails会识别,嘿,在这里放一条线?
textareas中的换行符产生为`\n'.但问题是,如果您只是将其转储到视图中,它只会是HTML源代码中的换行符.
您可以尝试使用Rails simple_format
帮助程序来处理其中的一些问题:http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#M002285
它会自动将换行符转换为HTML标记.你可以使用类似的东西<%= simple_format(my_text_field) %>
.
`标签中.这实际上取决于您需要使用哪种方法.如果_absolutely_必须保留所有新行,则应使用接受的答案.否则,请使用simple_format并计划要输出此值的段落标记.
2> Ian Lesperan..:
问题不在于编辑值,而是在稍后渲染它.要在textarea中编辑换行符时在其值中添加换行符,只需按返回键即可.当您稍后重新编辑该值时,空格应该仍然存在.
渲染空白是一个棘手的部分.在HTML中,空格通常是微不足道的.像浏览器使用的渲染器将为任何连续的空格字符串显示单个空格.所以仅仅将值转储到页面上是不够的:
<%= obj.description %>
即使你的价值可能是"One \t \n \n Two"
,它也会在屏幕上显示为"One Two"
.
要使这些新行字符在显示时实际分隔行,您需要在呈现之前将它们转换为HTML:
<%= obj.description.gsub(/\n/, '
') %>
当然,如果用户输入将包含在HTML中的数据,则应该转义值以防止XSS.如果您需要支持新行,那么它应该像这样简单:
<%= h(obj.description).gsub(/\n/, '
') %>
如果你想允许更复杂的格式化,请查看Markdown和Textile(这两个Rails都提供了帮助视图方法).请务必调查他们为XSS预防提供的支持.
保持用户输入不变,并将其添加到您的CSS:
white-space: pre-line;
它将在用户输入中显示\ r或\n(输入)作为新行.
这是另一种在字符串中显示换行符的方法,同时仍然可以转义文本的其余部分:
<%= safe_join(@object.textarea_input.split("\r\n"), "
".html_safe) %>