在 Rails 中-是否有一个 Rails 方法将 newline 转换为 < br > ?

有没有一种方法可以把 n 转换成 <br>

Currently, I'm doing it like this:

mystring.gsub(/\n/, '<br>')
54606 次浏览

没有。你有的是常用的替代品。大多数人使用的定义是:

   def nl2br text
text.gsub(/\n/, '<br/>')
end

之所以这样命名,是因为它模仿了 同名的 PHP 函数的功能。

你也可以考虑一下你正在做的事情——如果你正在很好地格式化人们输入的文本,你可以考虑一个像 Markdown这样的过滤器,让你的用户格式化他们的文本,而不会打开 HTML 这个蠕虫的罐子。你知道,就像在 Stack Overflow 这里一样。

你可以通过以下方法使它更加一般化:

mystring.gsub(/(?:\n\r?|\r\n?)/, '<br>')

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

是的,Rails 有 simple_format,它完全符合您的要求,而且稍微好一点,因为它还增加了段落标签。你看

Http://api.rubyonrails.org/classes/actionview/helpers/texthelper.html#method-i-simple_format

例如:

 simple_format(mystring)

请注意,simple_format允许基本的 HTML 标记,但是也通过 sanitize传递文本,它删除所有脚本,所以它应该是安全的用户输入。

在处理用户输入时,应该小心处理这个问题。
simple_format插入 <br>标签,但它 将允许其他 html 标记

使用 simple _ format 时,<b>Hello</b>将呈现为“ 你好”,您可能不希望这样。

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

这将准确地显示用户输入的内容,还允许在例如注释中讨论 html。

简单使用

white-space: pre-line;

在你的 css 和文本将换行。

mystring.gsub(/\r\n|\r|\n/, '\n')

对我有用

您可以执行 simple_format(h(text))-h将确保不呈现任何 HTML。

正如在其他答案中提到的,这会比你要求的多一点。它将整个内容包装在 <p>中,如果你在任何地方有双换行,它会添加更多的段落。

另一个选项是显示 <pre> html5标记中的文本。

HTML 元素表示预先格式化的文本 完全按照 HTML 文件中的内容显示 使用非比例(“单空间”)字体渲染。空白 inside this element is displayed as written.

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/pre