如何在没有JavaScript错误的情况下将PHP输出发送到浏览器之前压缩它?

时间:2013-08-10 13:48:09

标签: php minify http-compression

我有一个压缩php输出的函数,但是它给了我内联javascript的问题。

我找到了一个包含相关主题的页面,但是那里的样本不起作用:http://jeromejaglale.com/doc/php/codeigniter_compress_html

使用//缩短多个空格序列时会出现问题

如果我从数组中删除此部分,则Javascript运行良好。

问题:

有可能无需使用MinifyTidy之类的其他库来实现所需的结果吗?

功能:

/**
* [sanitize_output Compress the php output]
* @param  [type] $buffer [ Buffer = ob_get_contents(); ]
* @return [type]         [ string ]
*/
function sanitize_output($buffer)
{

$search = array(
'/\>[^\S ]+/s',         //strip whitespaces after tags, except space
'/[^\S ]+\</s',         //strip whitespaces before tags, except space
'/(\s)+/s',             // shorten multiple whitespace sequences
'/<!--(.|\s)*?-->/',    //strip HTML comments
'#(?://)?<!\[CDATA\[(.*?)(?://)?\]\]>#s', //leave CDATA alone

);
$replace = array(
'>',
'<',
'\\1',
'',
"//<![CDATA[\n".'\1'."\n//]]>",

);

$buffer = preg_replace($search, $replace, $buffer);


return $buffer;

} // End sanitize_output()

我使用它的方式:

<?php
if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) ob_start("ob_gzhandler"); else ob_start();

// ... Code ... Several CSS ... JS ..

$output = ob_get_contents();
ob_end_clean();
$output =  sanitize_output($output);
echo $output;

0 个答案:

没有答案