当我将bash命令的输出(在反引号中执行)保存到实例变量时,浏览器(或更具体地说,变量)会删除"\n"
个字符。我检查了页面的源代码,它显示如下:
line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
line 9
line 10
但浏览器显示如下:
line 1 line 2 line 3 line 4 line 5 line 6 line 7 line 8 line 9 line 10
我把它放在显示输出的方法上:
@variable.each_line do |line|
if line !~ /word1| word2/
line.sub("Word_I_don't_want", '')
end
end
但是变量不会与正则表达式进行比较,而是作为一个整体打印出来。浏览器显示不带<br>
的字符串作为单行,但源代码显示正在标识新行但未处理。我试过了
line.sub("\n", "<br>")
但它也没有用。希望有人能为我提供一些建议。
的解决: 的
感谢ilan berci我可以打印所需的值,尽管Tin Man指出应该在控制器上处理文本。所以我修改了我的方法:
tempString = String.new
@redes.each_line do |line|
if line !~ /word1|word2/
tempString = tempString + line.sub("word_I_don't_want", "").sub("\n", "<br>")
end
end
@redes = tempString
因为处理.erb中的文本会为每个不需要的行填充<br>
的页面代码(<br>
在每个.each_line迭代中都会被投放)。
感谢您的帮助!
答案 0 :(得分:1)
<% @variable.each_line do |line| %>
<% line = if line !~ /word1| word2/ %>
<%line.sub("Word_I_don't_want", '') %>
<% end %>
<%= line %>
<br/>
<% end %>
答案 1 :(得分:1)
问题在于浏览器如何显示行尾和空白。它们“吞噬”空格,标签,垂直标签和行尾,在显示时将它们挤压到一个空间中。
例如:
<html>
<body>
foo
bar
</body>
</html>
即使在foo bar
和foo
之间存在行尾(“\ n”),也会在浏览器中显示为bar
。
你可以通过几种方式解决这个问题:
<html>
<body>
foo<br>
bar<br>
</body>
</html>
或者:
<html>
<body>
<pre>
foo
bar
</pre>
</body>
</html>
将显示为:
foo
bar
鉴于:
<html>
<body>
<p>foo</p>
<p>bar</p>
</body>
</html>
将显示为:
foo
bar
浏览器几乎不尊重空白。具有多个空格和行尾的单词将显示为好像它们只有一个空格。如果我有一串字符:
foo\t \n bar
在页面中,它们将显示为:
foo bar
因为浏览器正在尝试提供帮助。
你如何“修复”你的代码?您可以将文本包装在<pre>
块中,将<br>
附加到您想要换行的行,或者使用CSS做一些有趣的事情来调整默认值<p>
或{{1标签。有很多方法可以达到目的,你只需要知道你正在做什么并选择一条路径。
答案 2 :(得分:0)
我在我的应用程序中使用了它:
def replace_newlines_with_br_tags(text)
h(text).gsub(/\r\n/, '<br />').gsub(/\r/, '<br />').gsub(/\n/, '<br />')
end
您可以将此添加到您的应用程序助手中,并在您的视图等中使用它
答案 3 :(得分:0)
@variable.gsub(/(?:\n\r?|\r\n?)/, '<br>')
积分here