2012-01-11 44 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