2011-04-28 89 views
7

我的想法是以某种方式在服务器端缩小HTML代码,所以客户端接收的字节数较少。如何缩小HTML代码?

“minify”是什么意思?

不是压缩。更像是,例如,jQuery创作者使用.min .js版本。换句话说,我需要删除不必要的空格和换行符,但我不能移除HTML表示的更改(例如,删除段落中实际词之间的空格)。

有什么工具可以做到吗?我知道有HtmlPurifier。它能够做到吗?任何其他选项?

P.S.请不要提供regex'ies。我知道只有Chuck Norris可以解析HTML。 =]

+1

我不认为你需要做到这一点。大多数Web服务器都支持“gzipped”服务网页。你的空格将不再成为问题。你应该始终提供你的网页gzipped。 – 2011-04-28 09:56:55

+0

您可以编写一个简单的程序,使用HTML解析库来解析HTML文件,然后将其写回。如果您使用C#,则可以查看LINQ到HTML库。 – 2011-04-28 09:59:12

+0

同意Stephen Chung:如果你使用gzip HTML,所有的空格都会被压缩。这将比修正HTML本身更快。 – bart 2011-04-28 11:55:26

回答

3

您可以将HTML代码解析为一个DOM树(它应该在节点中保留内容空白),然后将其串行化回HTML,而不需要任何美化空间。

8

晚了一点,但还是......通过使用output_buffering它是如此简单:

function compress($string) 
{ 
    // Remove html comments 
    $string = preg_replace('/<!--.*-->/', '', $string); 

    // Merge multiple spaces into one space 
    $string = preg_replace('/\s+/', ' ', $string); 

    // Remove space between tags. Skip the following if 
    // you want as it will also remove the space 
    // between <span>Hello</span> <span>World</span>. 
    return preg_replace('/>\s+</', '><', $string);  
} 

ob_start('compress'); 

// Here goes your html.  

ob_end_flush(); 
+4

你可能不想删除像pre,代码等标签中的空格 – 2013-08-29 06:46:30

+0

@BijayRungta你是对的。虽然可以通过一些修改来避免这种情况。我刚刚给了一个想法:) +1给你的评论。 – 2013-08-29 10:42:04

+0

解析HTML与正则表达式[不起作用](http://stackoverflow.com/a/1732454/509706)。您的正则表达式会在例如'

bar

'。 – 2017-04-06 14:58:01