有没有一种方法可以把 n 转换成 <br>?
<br>
Currently, I'm doing it like this:
mystring.gsub(/\n/, '<br>')
没有。你有的是常用的替代品。大多数人使用的定义是:
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,它完全符合您的要求,而且稍微好一点,因为它还增加了段落标签。你看
simple_format
Http://api.rubyonrails.org/classes/actionview/helpers/texthelper.html#method-i-simple_format
例如:
simple_format(mystring)
请注意,simple_format允许基本的 HTML 标记,但是也通过 sanitize传递文本,它删除所有脚本,所以它应该是安全的用户输入。
sanitize
在处理用户输入时,应该小心处理这个问题。 simple_format插入 <br>标签,但它 将允许其他 html 标记!
使用 simple _ format 时,<b>Hello</b>将呈现为“ 你好”,您可能不希望这样。
<b>Hello</b>
相反,您可以使用 <%= h(c.text).gsub("\n", "<br>").html_safe %> h()将首先对 html 进行编码,gsub代替换行符,html_safe允许显示 <br>标记。
<%= h(c.text).gsub("\n", "<br>").html_safe %>
h()
gsub
html_safe
这将准确地显示用户输入的内容,还允许在例如注释中讨论 html。
简单使用
white-space: pre-line;
在你的 css 和文本将换行。
mystring.gsub(/\r\n|\r|\n/, '\n')
对我有用
您可以执行 simple_format(h(text))-h将确保不呈现任何 HTML。
simple_format(h(text))
h
正如在其他答案中提到的,这会比你要求的多一点。它将整个内容包装在 <p>中,如果你在任何地方有双换行,它会添加更多的段落。
<p>
另一个选项是显示 <pre> html5标记中的文本。
<pre>
HTML 元素表示预先格式化的文本 完全按照 HTML 文件中的内容显示 使用非比例(“单空间”)字体渲染。空白 inside this element is displayed as written.
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/pre