zoukankan      html  css  js  c++  java
  • PHP渲染压缩HTML

    背景:

    优化一下邮件内容(HTML)存储,美滋滋~

    使用:

    清空一下缓冲区,include进来HTML -渲染,最重要的是压缩哦,正则自己掂量掂量,别把不该干掉的干掉了哈。

    <?php
    
    /**
         * 渲染HTML模板
         * 
         * @param  string $template 模板路径 /data/test.html
         * @param  array $params 模板参数
         * @return string 渲染后的HTML字符串
         * @author wystanxu@tencent.com
         * @since 2021-03-17
         * 
         */
        function parseHTML($template = '', $params = array())
        {
            ob_start();//打开输出控制缓冲
            if (!empty($params) && is_array($params)) {
                foreach ($params as $key => $value) {
                    $$key = $value;
                }
            }
            include($template);
            $html = ob_get_contents();//返回输出缓冲区的内容
            ob_get_clean(); // ob_get_contents + ob_end_clean // 得到当前缓冲区的内容并删除当前输出缓冲区
            $html = compressHTML($html);
            return $html;
        }
    
        /**
         * 压缩html
         * 
         * @param  $string  模板名称
         * @author JQ中文网 http://www.jquerycn.cn/a_24864
         */
        function compressHTML($string)
        {
            $string = str_replace("
    ", '', $string); //清除换行符
            $string = str_replace("
    ", '', $string); //清除换行符
            $string = str_replace("	", '', $string); //清除制表符
            $pattern = array(
                "/> *([^ ]*) *</", //去掉注释标记
                "/[s]+/", //多个空白字符 -- 置为1个空格
                "/<!--[\w\W
    \n]*?-->/", //<!-- -->注释之间的空白字符 -- 置空
                "/" /", //" 置为"
                "/ "/", // "置为"
            );
            $replace = array(
                ">\1<",
                " ",
                "",
                """,
                """,
            );
            return preg_replace($pattern, $replace, $string);
        }

    这里仅仅是压缩html和使用ob缓冲区获取渲染的内容;

    压缩html的话正则要看的清晰一些别把不该过滤的给过滤掉了;

    而ob函数的仅仅是 开启缓冲区 + 关闭缓冲区 + 获取缓冲区的内容; 

    很自然而言的认为,上面 ob_get_contents 获取到的是否会拉取到 start 之前的 输出内容,答案是 不会:

    <?php
    
    // https://www.php.net/manual/zh/ref.outcontrol.php
    
    echo 123;
    
    ob_start();//打开输出控制缓冲
    
    echo 456;
    
    $html = ob_get_contents();//返回输出缓冲区的内容
    
    ob_get_clean(); // ob_get_contents + ob_end_clean // 得到当前缓冲区的内容并删除当前输出缓冲区
    
    var_dump($html); // 输出string(3) "456"

    参考文章:

    https://www.hoohack.me/2015/01/24/php-ob_start-function

    https://www.php.net/manual/zh/ref.outcontrol.php

    I can see a bigger world.
  • 相关阅读:
    少用 if 进行普通意义上的参数验证
    到底差在了什么地方:Cs>MUTEX>Monitor>WaitHandle
    SQL Server 中的事务和锁(三)Range SU,XX 以及死锁
    练习:自己动手实现一个轻量级的信号量(二)
    让人崩溃的一上午
    我所犯的几个愚蠢错误(一)
    一个系列 之二
    练习:自己动手实现一个轻量级的信号量(一)
    Delphi的DirectShow开发概述
    xvid的中文简介
  • 原文地址:https://www.cnblogs.com/xuweiqiang/p/14735901.html
Copyright © 2011-2022 走看看