PHP压缩HTML函数,使用nocompress来指定不压缩的代码

您的位置:3搜网 > 技术 > PHP压缩HTML函数,使用nocompress来指定不压缩的代码

PHP压缩HTML函数,使用nocompress来指定不压缩的代码

来源:3搜网分类:技术时间:2022-06-22 15:57:18浏览量:

关于PHP压缩HTML函数,使用nocompress来指定不压缩的代码以下文字资料是由3搜网小编为大家搜集整理后发布的内容,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP压缩HTML函数,使用nocompress来指定不压缩的代码”文章吧。

使用PHP压缩HTML注意事项

使用 PHP 来压缩 HTML 实现的方式主要是用正则表达式去查找,替换。在 HTML 压缩的时候,主要要注意下面几点:

1、HTML 文档中,多个空白字符等价为一个空白字符。也就是说换行等空白字符的删除是不安全的,有可能导致部分元素的样式产生差异。

2、HTML 中的 pre、textarea 标签里面的任何空白,都不能被删除,因此 pre、textarea 标签里面的内容格式需要保留,不能压缩。

3、HTML 中有可能有 IE 条件注释。这些条件注释是文档逻辑的一部分,不能被删除。因此去掉 HTML 注释的时候,有些注释是不能去掉的,比如:<!–[if lt IE9]> <![endif]–>

4、压缩嵌入式JS中的注释要注意,因为可能注释符号会出现在字符串中,比如:var url = "https://www.qzone.top"; // 前面的//不是注释

5、对于动态页面来说,HTML 的压缩有可能还会增加服务器的 CPU 负担,得不偿失

PHP压缩HTML函数

1、特殊情况下可以使用<!–<nocompress>–><!–</nocompress>–>或者<nocompress></nocompress>来指定不压缩的代码

2、pre、textarea 标签不压缩

3、特别对JS的单行注释做出优化

/**
 * 压缩 HTML 代码
 *
 * @author  情留メ蚊子 <qlwz@qq.com>
 * @version 1.0.0.0 By 2016-11-23
 * @link    http://blog.cbylpt.cn
 * @param string $html_source HTML 源码
 * @return string 压缩后的代码
 */
function qlwz_compress_html($html_source)
{
    $chunks   = preg_split('/(<!--<nocompress>-->.*?<!--<\/nocompress>-->|<nocompress>.*?<\/nocompress>|<pre.*?\/pre>|<textarea.*?\/textarea>|<script.*?\/script>)/msi', $html_source, -1, PREG_SPLIT_DELIM_CAPTURE);
    $compress = '';
    foreach ($chunks as $c) {
        if (strtolower(substr($c, 0, 19)) == '<!--<nocompress>-->') {
            $c        = substr($c, 19, strlen($c) - 19 - 20);
            $compress .= $c;
            continue;
        } elseif (strtolower(substr($c, 0, 12)) == '<nocompress>') {
            $c        = substr($c, 12, strlen($c) - 12 - 13);
            $compress .= $c;
            continue;
        } elseif (strtolower(substr($c, 0, 4)) == '<pre' || strtolower(substr($c, 0, 9)) == '<textarea') {
            $compress .= $c;
            continue;
        } elseif (strtolower(substr($c, 0, 7)) == '<script' && strpos($c, '//') != false && (strpos($c, "\r") !== false || strpos($c, "\n") !== false)) { // JS代码,包含“//”注释的,单行代码不处理
            $tmps = preg_split('/(\r|\n)/ms', $c, -1, PREG_SPLIT_NO_EMPTY);
            $c    = '';
            foreach ($tmps as $tmp) {
                if (strpos($tmp, '//') !== false) { // 对含有“//”的行做处理
                    if (substr(trim($tmp), 0, 2) == '//') { // 开头是“//”的就是注释
                        continue;
                    }
                    $chars   = preg_split('//', $tmp, -1, PREG_SPLIT_NO_EMPTY);
                    $is_quot = $is_apos = false;
                    foreach ($chars as $key => $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 总结

有些童鞋不推荐压缩 HTML,主要原因除了上面所说的使用 PHP 压缩 HTML 注意事项外,通过gzip压缩已经能达到很好的效果。另外,因为产生影响 HTML 的角色太多(静态,动态,前端动态),也没什么量化指标,所以很难控制压缩成什么样(代码写成什么程度)。代码更需要考虑执行效率,而不是传输效率。对于动态页面来说,HTML 的压缩有可能还会增加服务器的 CPU 负担,得不偿失。Google 的压缩网页是因为早期他希望首页文本尽可能控制在一个或两个包内,而且他的首页太重要了,流量也很离谱。压缩一个字节,总流量一算都是个不小的数字,自然也就是必要之举了。进一步的压缩存在问题,除非能像 Google 一样充分测试(Google 也仅压缩了少部分核心服务的页面),否则不推荐对 HTML 进行压缩处理。

使用情留メ蚊子的 PHP 压缩 HTML 代码,能很好的解决这个问题。好了,还不快试试。

以上就是关于“PHP压缩HTML函数,使用nocompress来指定不压缩的代码”这篇文章的内容,希望分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注3搜网技术频道。