如何使用nokogiri去除html空白和评论和javascript评论?

时间:2011-11-26 16:24:08

标签: html ruby nokogiri

我正在寻找nokogiri中删除html空格的方法。评论和javascript评论(/ * * /,//)。我这样做不是因为文件的大小。我正在玩机架中间件来完成这项工作。我知道我可以通过正则表达来做,但我认为这可能很麻烦。

如果不能与nokogiri一起做,请给我最好的正则表达式去除上述2个案例。

我尝试使用正则表达式:

response = @app.call(env)
body = response.last.body.gsub(/(\n|\t|\r)/, ' ').gsub(/>\s*</, '><').gsub(/<!--[^>]*-->/, ' ').squeeze(' ')
response.last.body = body
response

我认为应该采用更简洁的方式而不是使用正则表达式。

3 个答案:

答案 0 :(得分:3)

Loofah很不错,但它不会帮助你删除javascript评论。

This thread涉及剥离js评论,但似乎存在很多分歧。我同意那些说你不应该这样做的人。但是,如果您想尝试使用丝瓜络接受的答案,您可以这样做:

require 'rubygems'
require "loofah"

scrubber = Loofah::Scrubber.new do |node|
    node.content = node.content.strip if node.name == "text"
    node.remove if node.name == "comment"
    if node.cdata? && node.parent.name == "script"
        node.content = node.content.gsub(/\/\*![^*]*\*+(?:[^*\/][^*]*\*+)*\//,'')
    end
end

puts Loofah.fragment('<p> trim </p><!-- remove --><p> me </p><script>var x=0;/*! remove! */</script>').scrub!(scrubber)

# <p>trim</p><p>me</p><script>var x=0;</script>

答案 1 :(得分:2)

丝瓜络可能就是你想要的:

https://github.com/flavorjones/loofah

答案 2 :(得分:0)

我最终写了一个middleware来处理这个,因为没有确切的解决方法。 在这里,我使用非常严格的正则表达式来处理它。

检查我的github repo上的代码。