新行字符搞砸了<pre> tags (Ruby on Rails)</pre>

时间:2011-04-04 02:21:27

标签: ruby-on-rails ruby regex newline

我正在开发一个博客,一些非常讨厌的东西正在发生换行符(\ n)。一切正常,除非我发布一个包含预标签的帖子,我的换行符会搞砸缩进。

所以,如果我的代码看起来像这样

<pre>
  <code>
    some code some code
    more code more code
  </code>
</pre>

由于某种原因,使用帖子保存在db字段中的换行符会导致pre标签内的任何内容被一两个选项卡缩进。

我不知道为什么要这样做,但如果我做了像

这样的事情
string.gsub!(/\n/, "<br />")

缩进被移除,所以我知道它与\ n有关。但后来我的问题是,有太多的换行符,然后格式是关闭的。

然后我尝试使用类似于

的方法捕获pre标签内的所有内容
def remove_newlines(string)
   regexp = /<pre>\s?(.*?)\s?<\/pre>/
   code = regexp.match(string)
   code[1].gsub!(/\n/, "<br />")
end

但我无法让它正常工作。

任何人都知道如何摆脱这个奇怪的缩进问题,或者对此有任何指示?

谢谢!

1 个答案:

答案 0 :(得分:5)

听起来您的模板引擎会自动缩进<pre>标记的内容。浏览器按原样呈现<pre>标记内的空白(根据规范,它们应该如此)。这意味着由模板引擎添加的<pre>内每行开头的空白以便使HTML源更具可读性,这也是在实际页面中呈现的,与HTML源中的大多数其他位置不同。

因此,解决方案取决于您的模板语言。

如果您使用的是HAML:

HAML FAQ: How do I stop Haml from indenting the contents of my pre and textarea tags?

希望这有帮助。