在Rails中 - 有一个rails方法将换行符转换为<br>吗?

dau*_*777 111 ruby ruby-on-rails

是否有一种Railsy方式将\n转换为<br>

目前,我这样做:

mystring.gsub(/\n/, '<br>')
Run Code Online (Sandbox Code Playgroud)

Dan*_*nge 252

是的,rails具有simple_format与您正在寻找的完全相同的功能,并且稍微好一些,因为它还添加了段落标记.看到

http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format

例:

 simple_format(mystring)
Run Code Online (Sandbox Code Playgroud)

请注意,它simple_format允许使用基本HTML标记,但也会传递sanitize删除所有脚本的文本,因此对于用户输入应该是安全的.

  • 应该注意的是,`simple_format`会自动将提供的文本包装在`<p>`标签中,并且无法避免此功能. (3认同)
  • 从rails 4开始,simple_format具有`wrapper_tag`选项,允许更改`<p>`标记用于其他任何内容 (3认同)

Tom*_*lak 40

您可以通过以下方式使其更加通用:

mystring.gsub(/(?:\n\r?|\r\n?)/, '<br>')
Run Code Online (Sandbox Code Playgroud)

这样你就可以覆盖DOS,*NIX,Mac和意外的无效行尾.

  • +1为广义的非Rails解决方案.作为一个不喜欢Rails的Ruby开发者,这些人太少了. (5认同)
  • 好的正则表达式,谢谢.如果你想做类似于`simple_format`的事情你可以拆分那个正则表达式,使用`map`将字符串包装成打开和关闭`p`标签,然后加入它们.`mystring.split(/(?:\n\r?| |\r \n?)/).map {| s | "<p>#{s} </ p>"}.join`应该这样做,虽然我没有测试它. (3认同)

jom*_*omo 29

在处理用户输入时应该小心这一点.
simple_format插入<br>标签,但它将允许其他HTML标签!

使用simple_format时,<b>Hello</b>将呈现为" Hello ",您可能不希望这样.

相反,您可以使用<%= h(c.text).gsub("\n", "<br>").html_safe %>
h()将首先编码html,gsub替换换行符并html_safe允许<br>显示标记.

这将准确显示用户输入的内容.它还允许在例如评论中讨论html.


ber*_*ika 17

简单地使用

white-space: pre-line;
Run Code Online (Sandbox Code Playgroud)

在你的CSS和文本将换行换行.

  • 漂亮优雅的解决方案,完全符合OP的要求,仅此而已 - 带有html标签的文本不会呈现为html。就我而言,我希望输出与输入完全匹配(例如 &lt;b&gt;&lt;/b&gt; 不会以粗体显示文本。 (2认同)