压缩HTML的起因
使用PHP压缩HTML注意事项
HTML文档中,多个空白字符等价为一个空白字符。也就是说换行等空白字符的删除是不安全的,有可能导致部分元素的样式产生差异。
HTML中的pre、textarea标签里面的任何空白,都不能被删除,因此pre、textarea标签里面的内容格式需要保留,不能压缩。
HTML中有可能有IE条件注释。这些条件注释是文档逻辑的一部分,不能被删除。因此去掉HTML注释的时候,有些注释是不能去掉的,比如:
压缩嵌入式JS中的注释要注意,因为可能注释符号会出现在字符串中,比如:var url = "https://www.yangguangdream.com"; // 前面的//不是注释
对于动态页面来说,HTML的压缩有可能还会增加服务器的CPU负担,得不偿失
PHP压缩HTML函数
特殊情况下可以使用或者来指定不压缩的代码
pre、textarea标签不压缩
特别对JS的单行注释做出优化
/**
* 压缩HTML代码
*
* @author yangguangdream.com
* @version 1.0.0.0
* @link http://www.yangguangdream.com
* @param string $html_source HTML源码
* @return string 压缩后的代码
*/
function qlwz_compress_html($html_source)
{
$chunks = preg_split('/(.*?|.*?<\/nocompress>|||)/msi', $html_source, -1, PREG_SPLIT_DELIM_CAPTURE);
$compress = '';
foreach ($chunks as $c) {
if (strtolower(substr($c, 0, 19)) == '') {
$c = substr($c, 19, strlen($c) - 19 - 20);
$compress .= $c;
continue;
} elseif (strtolower(substr($c, 0, 12)) == '') {
$c = substr($c, 12, strlen($c) - 12 - 13);
$compress .= $c;
continue;
} elseif (strtolower(substr($c, 0, 4)) == ' $char) {
if ($char == '"' && !$is_apos && $key > 0 && $chars[$key - 1] != '\\') {
$is_quot = !$is_quot;
} elseif ($char == '\'' && !$is_quot && $key > 0 && $chars[$key - 1] != '\\') {
$is_apos = !$is_apos;
} elseif ($char == '/' && $chars[$key + 1] == '/' && !$is_quot && !$is_apos) {
$tmp = substr($tmp, 0, $key); // 不是字符串内的就是注释
break;
}
}
}
$c .= $tmp;
}
}
$c = preg_replace('/[\\n\\r\\t]+/', ' ', $c); // 清除换行符,清除制表符
$c = preg_replace('/\\s{2,}/', ' ', $c); // 清除额外的空格
$c = preg_replace('/>\\s <', $c); // 清除标签间的空格
$c = preg_replace('/\\/\\*.*?\\*\\//i', '', $c); // 清除 CSS & JS 的注释
$c = preg_replace('//', '', $c); // 清除 HTML 的注释
$compress .= $c;
}
return $compress;
}
压缩HTML总结
微信扫码查看本文
发表评论