当前位置:  开发笔记 > 后端 > 正文

Rails - 在文本区域添加换行符

如何解决《Rails-在文本区域添加换行符》经验,为你挑选了4个好方法。

我有一个rails应用程序,我可以在我的模型中输入几段文字.问题是我不知道如何输入任何换行符.

我尝试添加"{ln} {/ ln}; { }和{br} {/ br}",但这只会将html显示为文本而不会中断.

无论如何我可以设置它,所以文本区域控件将使用我在模型条目中放置的任何html?

有什么东西我可以输入,所以rails会识别,嘿,在这里放一条线?



1> Karl..:

textareas中的换行符产生为`\n'.但问题是,如果您只是将其转储到视图中,它只会是HTML源代码中的换行符.

您可以尝试使用Rails simple_format帮助程序来处理其中的一些问题:http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#M002285

它会自动将换行符转换为HTML标记.你可以使用类似的东西<%= simple_format(my_text_field) %>.


为了记录,为了避免XSS攻击你应该像这样转义var:<%= simple_format h(my_text_field)%>
@tomeduarte simple_format默认清理,不需要h().这是一个老帖子......也许这个功能是新的.
simple_format的问题在于它太聪明了.它将保留你文本中的任何\n,但它会假设两个\n是用来表示一个新的段落,并将接受你的输入并将它的特定部分包装在`

`标签中.这实际上取决于您需要使用哪种方法.如果_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预防提供的支持.


从Rails 3开始,你必须添加.html_safe:<%= h(obj.description).gsub(/ \n /,'
').html_safe%>

3> 小智..:

保持用户输入不变,并将其添加到您的CSS:

white-space: pre-line;

它将在用户输入中显示\ r或\n(输入)作为新行.


这么容易多了.好答案.
这应该是答案.

4> 小智..:

这是另一种在字符串中显示换行符的方法,同时仍然可以转义文本的其余部分:

<%= safe_join(@object.textarea_input.split("\r\n"), "
".html_safe) %>

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有