2012-01-11 45 views
1

使用Sinatra有没有方法去除ERB模板中的HTML空白?如何去除ERB模板中的HTML空白字符?

Slim引擎是开箱即用的,但我不知道ERB如何做到这一点。

+0

剥离空白和混淆不是同一件事。而“dinamically”不是一个字。你的意思是“动态”吗? – 2012-01-12 00:51:20

+0

好吧,我简化了问题 – 2012-01-12 00:57:49

+0

好多了! @大卫。虽然SO上的标题应该作为一个问题来表述,所以“如何在ERB模板中去除HTML空格?”会很好。 – 2012-01-12 01:09:34

回答

0

西纳特拉可以让你创建你自己的中间件,一个可能的解决方案(为我的作品)是创建一个自定义类(中间件Sinatra的条款),并使用它。自定义类使用正则表达式来删除所有空白,并尊重内容:

class ObfuscateHTML 
    def initialize(app, options = {}) 
    @app = app 
    end 

    def call(env) 
    status, headers, response = @app.call(env) 

    if headers["Content-Type"] =~ /\bhtml\b/ 
     response[0] = response[0].gsub(/\s*(<[^>]+>)\s*/, '\1') 
     headers["Content-Length"] = response[0].size.to_s 
    end 

    [status, headers, response] 
    end 
end 

use ObfuscateHTML 
1

使用Rack::Deflater中间件进行gzip压缩(普通的HTTP东西)。

如何使用中间件:http://www.sinatrarb.com/intro#Rack%20Middleware

+0

也许“压缩”不是一个好词,我的意思是删除空白,我已编辑的问题 – 2012-01-11 23:47:50

+0

我已经切换“压缩”为“混淆”,以更好地解释问题 – 2012-01-12 00:05:15

+2

你真的不能混淆HTML。 GZIP压缩将比剥离空白更进一步。如果打算让标记更难阅读,那么你在开玩笑吧。我需要做的就是整理标记(或者使用DOM检查器)。 – d11wtq 2012-01-12 00:45:53

2

使用下面的正则表达式从HTML剥离的空格。这不是可取的方法(由于HTML的本质不适合正则表达式)。但是,它运作良好。

(?<=[^])\t{2,}|(?<=[>])\s{2,}(?=[<])|(?<=[>])\s{2,11}(?=[<])|(?=[\n])\s{2,} 
+0

我必须在哪里必须将该正则表达式放在我的Sinatra中应用程序吗? – 2012-01-11 23:56:41

+0

我不是Ruby和Sinatra应用程序用户。但是,如果您可以在输出HTML输出之前使用任何正则表达式,只需使用上述模式并删除任何匹配的子字符串即可。它适用于我们用C#编写的CMS产品。但是,以上模式当然不是C#特定的。 – 2012-01-12 00:07:16

+0

好的工作!第一个'(?<= [^])'可能会在ruby中引发错误。我正在使用'(?<= [\ ^])'。 – Jokester 2013-12-17 20:07:52