THINKPHP 清除HTML注释、换行符、空格、制表符等
thinkphp3.2 3.2中取消了配置文件中的 'TMPL_STRIP_SPACE' 属性,所以我们先来修改:\ThinkPHP\Library\Think\Template.class.php 文件
找到compiler方法:
/**
* 编译模板文件内容
* @access protected
* @param mixed $tmplContent 模板内容
* @return string
*/
protected function compiler($tmplContent) {
//模板解析
$tmplContent = $this->parse($tmplContent);
// 还原被替换的Literal标签
$tmplContent = preg_replace_callback('/<!--###literal(\d+)###-->/is', array($this, 'restoreLiteral'), $tmplContent);
// 添加安全代码
$tmplContent = '<?php if (!defined(\'THINK_PATH\')) exit();?>'.$tmplContent; /* 去除html空格与换行 */
if(C('TMPL_STRIP_SPACE')) {
//方法一
// $find = array('~>\s+<~','~>(\s+\n|\r)~');
// $replace = array('><','>');
// $tmplContent = preg_replace($find, $replace, $tmplContent);
//方法二
// $tmplContent = trim($tmplContent); //清除字符串两边的空格
// $tmplContent = preg_replace("/\t/","",$tmplContent);
// $tmplContent = preg_replace("/\r\n/","",$tmplContent);
// $tmplContent = preg_replace("/\r/","",$tmplContent);
// $tmplContent = preg_replace("/\n/","",$tmplContent);
// $tmplContent = preg_replace("/ /","",$tmplContent); //匹配html中的空格 制表符
//方法三
$tmplContent = $this->compress_html($tmplContent);
} // 优化生成的php代码
$tmplContent = str_replace('?><?php','',$tmplContent);
// 模版编译过滤标签
Hook::listen('template_filter',$tmplContent);
return strip_whitespace($tmplContent);
}
如上所示,添加 if条件 使配置文件支持该属性。
if(C('TMPL_STRIP_SPACE'))
配置文件中就可以使用:
'TMPL_STRIP_SPACE' => true, // 是否去除模板文件里面的html空格与换行
开启压缩了。
=====================================================================================
上面的代码展示了三种压缩方法,方法三使用了自定义的方法:
/**
* 压缩html : 清除换行符,清除制表符,去掉注释标记
* @param $string
* @return压缩后的$string
* */
public function compress_html($string){
$string=str_replace("\r\n",'',$string);//清除换行符
$string=str_replace("\n",'',$string);//清除换行符
$string=str_replace("\t",'',$string);//清除制表符
$pattern=array(
"/> *([^ ]*) *</",//去掉注释标记
"/[\s]+/",
"/<!--[^!]*-->/",
"/\" /",
"/ \"/",
"'/\*[^*]*\*/'"
);
$replace=array (
">\\1<",
" ",
"",
"\"",
"\"",
""
);
return preg_replace($pattern, $replace, $string);
}
另一种方法:
function higrid_compress_html($higrid_uncompress_html_source )
{
$chunks = preg_split( '/(<pre.*?\/pre>)/ms', $higrid_uncompress_html_source, -1, PREG_SPLIT_DELIM_CAPTURE );
$higrid_uncompress_html_source = '';//[higrid.net]修改压缩html : 清除换行符,清除制表符,去掉注释标记
foreach ( $chunks as $c )
{
if ( strpos( $c, '<pre' ) !== 0 )
{
//remove new lines & tabs
$c = preg_replace( '/[\\n\\r\\t]+/', ' ', $c );
//remove extra whitespace
$c = preg_replace( '/\\s{2,}/', ' ', $c );
//remove inter-tag whitespace
$c = preg_replace( '/>\\s</', '><', $c );
//remove CSS & JS comments
$c = preg_replace( '/\\/\\*.*?\\*\\//i', '', $c );
}
$higrid_uncompress_html_source .= $c;
}
return $higrid_uncompress_html_source;
}
php压缩html函数代码总结
有些童鞋不 推荐压缩html , 主要原因除了上面所说的 php来压缩HTML注意事项 外,通过 gzip 压缩已经能达到很好的效果。另外,因为产生影响HTML的角色太多(静态,动态,前端动态),也没什么量化指标,所以很难控制压缩成什么样(代码写成什么程度)。代码更需要考虑执行效率,而不是传输效率。对于动态页面来说,HTML 的压缩有可能还会增加服务器的 CPU 负担,得不偿失。Google的压缩网页 是因为早期他希望首页文本尽可能控制在一个或两个包内,而且他的首页太重要了,流量也很离谱。压缩一个字节,总流量一算都是个不小的数字,自然也就是必要之举了。进一步的压缩存在问题,除非能像 Google 一样充分测试(Google 也仅压缩了少部分核心服务的页面),否则不推荐对 HTML 进行压缩处理。
=========================================
查看效果:
故事234:www.story234.com
荆州古城:www.jzeye.com
提示:如果页面使用了如下的代码
<volist name="jzgs" id="v" key="k" offset="10" length='3' >
<li {$k==1?"style='margin-left:0'":""} ><a href="/{$v.mode.url}/{$v.id}.html" title="{$v.title}"><img src="{$v.img}" width=120 height=120 alt="{$v.title}"/><span>{$v.title}</span></a></li>
</volist>
三元运算符:
<li {$k==1?"style='margin-left:0'":""} >
方法一、方法二、压缩以后可能会产生错误 <listyle....
THINKPHP 清除HTML注释、换行符、空格、制表符等的更多相关文章
- 换行符javajava去除字符串中的空格、回车、换行符、制表符
在改章节中,我们主要介绍换行符java的内容,自我感觉有个不错的建议和大家分享下 每日一道理 只有启程,才会到达理想和目的地,只有拼搏,才会获得辉煌的成功,只有播种,才会有收获.只有追求,才会 ...
- 【Python-2.7】换行符和制表符
在Python中换行符“\n”表示接下来的内容将会换到下一行显示,制表符“\t”表示下面的内容显示时在前面留出空白,如打印如下内容: Dear: I love you forever! 上面的一段话分 ...
- java去除字符串中的空格、回车、换行符、制表符
import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author chzeze * 2016-11-07 */ ...
- 换行符java去除字符串中的空格、回车、换行符、制表符
import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author lei * 2011-9-2 */ publ ...
- c#去除字符串中的空格,回车,换行符,制表符
string l_strResult = str.Replace("\n", "").Replace(" ","").R ...
- Java字符代码中干掉制表符、回车符和换行符
Java字符代码中干掉制表符.回车符和换行符 代码片段: String sql = StringUtils.trim(sql).replaceAll("[\\r\\n\\t]",& ...
- C#中关于换行符的记录
最近在做一个练习的时候,从其他数据库提出来数据装到自己的数据表中,发现同是编辑器的内容却在页面上显示不出来,但是在数据库中又确实存在,经过一番折腾之后发现是 换行符 的问题.在我的编辑器中是以 ‘\r ...
- PHP压缩html网页代码原理(清除空格,换行符,制表符,注释标记)
本博启用了一个叫wp super cache的页面压缩工具, 源代码没有去查看,不过原理很简单. 我们可以自己动手书写一个压缩脚本. 清除换行符,清除制表符,去掉注释标记 .它所起到的作用不可小视. ...
- (转载)SQL去除回车符,换行符,空格和水平制表符
http://www.cnblogs.com/insus/p/4815336.html MS SQL去除回车符,换行符,空格和水平制表符,参考下面语句,一般情况是SQL接受富文本或是textarea的 ...
随机推荐
- 何时要打开stm32的AFIO时钟
STM32的管脚配置一般有2个:Default和rinmap,如果使用default就不需要打开AFIO,否则使用后者就需要打开3个时钟:GPIO时钟.外设功能时钟和AFIO时钟. 一般在涉及外中断配 ...
- Python语言快速入门
Python的主提示符(>>>):是解释器告诉你它正在等待你输入的下一个语句 Python的次提示符(...):告诉你解释器正在等待你输入当前语句的其他部分 [简介] Python( ...
- tiny210裸机第1课(启动原理)
软硬件环境 宿主机系统:ubuntu 板子芯片:S5PV210(Contex-A8),512M DDR2,512M SLC Nand 交叉编译器:arm-linux-gcc-4.5.1 手册:S5PV ...
- C++primer 练习12.27
// 12_27.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...
- (easy)LeetCode 257.Binary Tree Paths
Given a binary tree, return all root-to-leaf paths. For example, given the following binary tree: 1 ...
- GroupId和ArtifactId
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency> ...
- JavaScript对象的创建之基于构造方法+原型方式
为了解决原型所带来的问题,此处需要通过组合构造方法和原型来实现对象的创建,将属性在构造方法中定义,将方法在原型中定义.这种有效集合了两者的优点,是目前最为常用的一种方式. function Perso ...
- 最小生成树之prim
prim是设置一个初始结点,寻找其周围最小的边权值,并将该结点作为初始结点,继续寻找现在结点周围的边权值的最小值,但要注意如果这次寻找的某个边权值没有上次的小的话仍然保留上一次的边权值,即lowcas ...
- gcc编译, gdb调试, makefile写法
//test.c: #include <stdio.h> int main(void) { printf("hello world!"); return 0; } == ...
- 洛谷P2728 纺车的轮子 Spinning Wheels
P2728 纺车的轮子 Spinning Wheels 29通过 66提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目背景 一架纺车 ...