回答
西納特拉可以讓你創建你自己的中間件,一個可能的解決方案(爲我的作品)是創建一個自定義類(中間件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
使用Rack::Deflater中間件進行gzip壓縮(普通的HTTP東西)。
也許「壓縮」不是一個好詞,我的意思是刪除空白,我已編輯的問題 – 2012-01-11 23:47:50
我已經切換「壓縮」爲「混淆」,以更好地解釋問題 – 2012-01-12 00:05:15
你真的不能混淆HTML。 GZIP壓縮將比剝離空白更進一步。如果打算讓標記更難閱讀,那麼你在開玩笑吧。我需要做的就是整理標記(或者使用DOM檢查器)。 – d11wtq 2012-01-12 00:45:53
使用下面的正則表達式從HTML剝離的空格。這不是可取的方法(由於HTML的本質不適合正則表達式)。但是,它運作良好。
(?<=[^])\t{2,}|(?<=[>])\s{2,}(?=[<])|(?<=[>])\s{2,11}(?=[<])|(?=[\n])\s{2,}
我必須在哪裏必須將該正則表達式放在我的Sinatra中應用程序嗎? – 2012-01-11 23:56:41
我不是Ruby和Sinatra應用程序用戶。但是,如果您可以在輸出HTML輸出之前使用任何正則表達式,只需使用上述模式並刪除任何匹配的子字符串即可。它適用於我們用C#編寫的CMS產品。但是,以上模式當然不是C#特定的。 – 2012-01-12 00:07:16
好的工作!第一個'(?<= [^])'可能會在ruby中引發錯誤。我正在使用'(?<= [\ ^])'。 – Jokester 2013-12-17 20:07:52
- 1. 導軌ERB模板的空白去除器?
- 2. 紅寶石ERB模板移除太多空白
- 3. 如何去除Erlang中字符串中的所有空白字符?
- 4. 如何去除Java字符串中的空白/單字符圓括號
- 5. 如何去除字符串前面的空白?
- 6. 從Mako模板輸出中去除空白(Pylons)
- 7. 如何使用正則表達式去除雙空白字符?
- 8. 如何使用Mako模板去除空白和換行符?我的12362行HTML文件正在查殺IE
- 9. 如何從html文檔中去除空白
- 10. 從ExpressionEngine模板中刪除空白
- 11. 如何去除表格中的白色空白?
- 12. 如何在HTML /模板中的操作後控制空白?
- 13. 如何在模型中去除模型中的字符串的HTML標記
- 14. 如何延長ERB模板
- 15. 如何評論erb模板?
- 16. 如何將erb模板渲染到字符串內的動作?
- 17. 如何去除數字字符之間的空格字符?
- 18. 濾波器NSScanner一個String和去除空白數字字符
- 19. Codeigniter去除HTML郵件中的字符
- 20. 除去空間中的字符串
- 21. 除去空間中的特定字符
- 22. 去除XML標籤空白
- 23. JavaScript的 - 如何刪除某些空白字符字符串
- 24. 如何去除段落和頁腳之間的白色空白?
- 25. SQL如何刪除所有的ASCII字符(空白字段輸入後空白)
- 26. 如何從c中的字符串中去除html代碼#
- 27. 刪除拖尾行的ERB模板
- 28. Django模板空白
- 29. 如何去除TCL中字符串中的空格?
- 30. 如何在ERB模板中輸入返回空格?
剝離空白和混淆不是同一件事。而「dinamically」不是一個字。你的意思是「動態」嗎? – 2012-01-12 00:51:20
好吧,我簡化了問題 – 2012-01-12 00:57:49
好多了! @大衛。雖然SO上的標題應該作爲一個問題來表述,所以「如何在ERB模板中去除HTML空格?」會很好。 – 2012-01-12 01:09:34