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.
  • 相关阅读:
    31-指针为什么区分类型
    30-多级指针的介绍
    29-指针的练习(包含指针的使用场景)
    28-指针的定义和初始化
    27-指针的概念
    26-字符串函数
    SringMVC Ajax
    SpringMVC返回数据到页面
    springmvc参数传递(二)
    springmvc参数传递(一)
  • 原文地址:https://www.cnblogs.com/xuweiqiang/p/14735901.html
Copyright © 2011-2022 走看看