【问题标题】:How do I strip HTML whitespace in ERB templates?如何去除 ERB 模板中的 HTML 空白?
【发布时间】:2012-02-05 08:18:28
【问题描述】:

有没有办法使用 Sinatra 去除 ERB 模板中的 HTML 空格?

Slim 引擎开箱即用,但我不知道 ERB 怎么能做到这一点。

【问题讨论】:

  • 去除空白和混淆不是一回事。而“动态地”不是一个词。您的意思是“动态地”吗?
  • 好的,我已经简化了问题
  • 好多了! @大卫。 SO 上的标题应该被表述为一个问题,所以“如何在 ERB 模板中去除 HTML 空白?”会很好。
  • 标题已更新,谢谢:)

标签: ruby sinatra erb


【解决方案1】:

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

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

【讨论】:

  • 我必须将该正则表达式放在我的 Sinatra 应用程序的什么位置?
  • 我不是 Ruby 也不是 Sinatra 应用程序用户。但是,如果您可以在输出 HTML 输出之前使用任何正则表达式,只需使用上述模式并删除任何匹配的子字符串。它适用于我们用 C# 编写的 CMS 产品。但是,上述模式当然不是 C# 特定的。
  • 干得好!第一个 (?&lt;=[^]) 可能会在 ruby​​ 中引发错误。我正在使用(?&lt;=[\^])
【解决方案2】:

使用 Rack::Deflater 中间件进行 gzip 压缩(常规 HTTP 内容)。

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

【讨论】:

  • 也许“压缩”不是一个好词,我的意思是删除空格,我已经编辑了问题
  • 我已将“压缩”切换为“混淆”以更好地解释问题
  • 你不能真正混淆 HTML。 GZIP 压缩将比剥离空白更进一步。如果目的是让标记更难阅读,那你就是在自欺欺人;我需要做的就是整理标记(或为此使用 DOM 检查器)。
  • 我认为这是可能的。我已经实现了一个自定义中间件,看看我的答案。效果很好。
  • 尽管如此,我的目的不是让标记更难阅读,这只是个人练习,当然 gzip 可以更好地优化带宽,但我并不是要求 strip vs gzip
【解决方案3】:

Sinatra 允许您创建自己的中间件,一个可能的解决方案(对我有用)是创建一个自定义类(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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 2021-11-05
    • 2015-07-02
    相关资源
    最近更新 更多