是否有一种Railsy方式将\ n转换为<br>
?
目前,我这样做:
mystring.gsub(/\n/, '<br>')
答案 0 :(得分:245)
是的,rails有simple_format
,它正是您正在寻找的,并且稍微好一点,因为它还添加了段落标记。见
http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format
示例:
simple_format(mystring)
请注意,simple_format
允许使用基本HTML标记,但也会通过sanitize
传递文本,删除所有脚本,因此对用户输入应该是安全的。
答案 1 :(得分:40)
您可以通过以下方式使其更加通用:
mystring.gsub(/(?:\n\r?|\r\n?)/, '<br>')
这样你可以覆盖DOS,* NIX,Mac和意外的无效行结尾。
答案 2 :(得分:28)
在处理用户输入时,请务必小心
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。评价。
答案 3 :(得分:15)
只需使用
white-space: pre-line;
在你的CSS和文本中将换行换行。
答案 4 :(得分:1)
您也可以考虑一下您要尝试做什么 - 如果您很好地格式化了人们输入的文字,您可以考虑使用Markdown之类的过滤器,让您的用户在不打开文字的情况下格式化文字蠕虫是HTML。你知道,就像在Stack Overflow这里一样。
答案 5 :(得分:0)
mystring.gsub(/\r\n|\r|\n/, '\n')
为我工作
答案 6 :(得分:0)
您可以执行html, body, .container {
height: 100%;
}
– simple_format(h(text))
将确保不呈现任何HTML。
如其他答案中所述,这将比您要求的做更多。它将整个内容包装在h
中,如果您在任何地方有双换行符,则会添加更多的段落。
答案 7 :(得分:0)
另一种选择是在 <pre>
html5 标签内显示文本。
HTML 元素表示要被格式化的预格式化文本 完全按照 HTML 文件中所写的方式呈现。文本通常是 使用非比例(“等宽”)字体呈现。空白 此元素内部显示为书面形式。
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/pre
答案 8 :(得分:-1)
不。你有什么是常用的替代品。大多数人使用的定义是:
def nl2br text
text.gsub(/\n/, '<br/>')
end
它的名称是因为它模仿了PHP function by the same name的功能。