2011-04-28 119 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