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("\r\n", '', $string); //清除换行符 $string = str_replace("\n", '', $string); //清除换行符 $string = str_replace("\t", '', $string); //清除制表符 $pattern = array( "/> *([^ ]*) *", //去掉注释标记 "/[\s]+/", //多个空白字符 -- 置为1个空格 "//", //注释之间的空白字符 -- 置空 "/\" /", //" 置为" "/ \"/", // \"置为\" ); $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