Archive for the ‘程序设计’ Category

CSS控制标题字符长度

设计网页的时候往往会遇到在一个页面里设置其他页面的相关链接,但往往其他页面的标题很长,导致排版错乱。起初第一个想到的是通过脚本语言对于标题的长度进行截取,比如将标题统一截取20个字符。但是这样存在一个问题,就是当截取的字符中有英文、有中文的时候,由于英文长度和中文不一致,导致还是很难控制标题的统一长度。其实CSS可以很好的解决这个问题,并且不需要截取标题,更加有利于seo,具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
<style type="text/css">
.title
{
width:150px;
white-space:nowrap;
word-break:keep-all;
overflow:hidden;
text-overflow:ellipsis;
}
</style>
<p><span class=title>these words are tooooooo long!!!</span></p>
<div class=title>这个标题实在是太太太太太太太太长了!</div>


记一次ZEND下404错误

先简单介绍下环境godaddy的Linux虚拟主机,php+zend+smarty的MVC开发模式。

结果将新版本的所有文件上传到服务器后,打开页面(http://www.33iq.com )结果评分、评论、登陆等所有AJAX功能全部出错,通过chrome的console功能发现AJAX提交的页面都是404。检查所有代码和相关配置后没有发现有什么异常的错误,更加悲剧的是虽然返回现实的是404页面,但是数据都正常返回的,由于AJAX通过返回状态来判断数据是否读取,以至于AJAX全部瘫痪。然后分别测试每个页面是否有这个问题,发现所有带有index的链接都存在这个问题,其余页面都正常,于是尝试在服务器上加了个index的文件夹。结果奇迹发生了,好了。

分析一下,觉得通过zend读取了相应数据,但是返回的状态却是通过服务器上的路径,原因不清楚,本地测试都没有发生错误。可能是因为服务器上一些位置的故障。比如godaddy上的缓冲没清干净,总之说不清。。。faint

Iframe自适应高度 IE6、7、8、firefox、chrome下测试通过

起因是调用Google API的JS,由于默认JS都是UTF-8编码,网页上是gbk编码,导致输出都是乱码。于是只能使用iframe把内容包括进来。但是iframe的高度无法控制,导致需要滑块,后来找到一个比较好的兼容个浏览器的代码,让iframe自适应高度。代码如下:

1
2
<br />
<iframe width="798" name="iframeA" id="iframeA"  src="c.html" marginwidth="0" marginheight="0" frameborder="0" onload="Javascript:setIframe()" height="670" scrolling="no"></iframe><br />

1
2
3
4
5
6
7
8
9
10
11
<script type="text/javascript">// < ![CDATA[
// < ![CDATA[
// < ![CDATA[
function setIframe(){
var iframe = document.getElementById("iframeA");
var bHeight = iframe.contentWindow.document.body.scrollHeight;
var dHeight = iframe.contentWindow.document.documentElement.scrollHeight;
var height = bHeight>dHeight?bHeight:dHeight;
iframe.height = height;
}
// ]]></script><br />

  • document.documentElement.clientHeight,HTML 元素的客户区域高度;
  • document.body.clientHeight,BODY 元素的客户区域高度;
  • document.documentElement.scrollHeight,HTML 元素的滚动区域高度;
  • document.body.scrollHeight,BODY 元素的滚动区域高度。

在各浏览器中效果不同,所以通过比较去最大值:

jquery.lazyload实现页面图片逐渐加载

今天给博客增加一个新功能:图片逐渐加载,就是当浏览器打开页面后,只加载浏览器视觉范围内的页面,当下拉浏览器,经过的图片才会逐渐显示。详细效果可参见《Gooner till I die——阿森纳》文章里的图片加载效果。

在wordpress里增加这个功能比较简单,直接在插件里搜索lazyload就可以了。

在单独页面里增加这个功能需要先加载jquery.JS,然后加载lazyload.JS。jquery都不知道是什么的话,那先自行谷歌。lazyload是jquery的一个插件,具体代码如下:

1
eval(function(p,a,c,k,e,d){e=function(c){return(c<a ?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(5($){$.J.L=5(r){8 1={d:0,A:0,b:"h",v:"N",3:4};6(r){$.D(1,r)}8 m=9;6("h"==1.b){$(1.3).p("h",5(b){8 C=0;m.t(5(){6(!$.k(9,1)&&!$.l(9,1)){$(9).z("o")}j{6(C++>1.A){g B}}});8 w=$.M(m,5(f){g!f.e});m=$(w)})}g 9.t(5(){8 2=9;$(2).c("s",$(2).c("i"));6("h"!=1.b||$.k(2,1)||$.l(2,1)){6(1.u){$(2).c("i",1.u)}j{$(2).K("i")}2.e=B}j{2.e=x}$(2).T("o",5(){6(!9.e){$("<v />").p("X",5(){$(2).Y().c("i",$(2).c("s"))[1.v](1.Z);2.e=x}).c("i",$(2).c("s"))}});6("h"!=1.b){$(2).p(1.b,5(b){6(!2.e){$(2).z("o")}})}})};$.k=5(f,1){6(1.3===E||1.3===4){8 7=$(4).F()+$(4).O()}j{8 7=$(1.3).n().G+$(1.3).F()}g 7< =$(f).n().G-1.d};$.l=5(f,1){6(1.3===E||1.3===4){8 7=$(4).I()+$(4).U()}j{8 7=$(1.3).n().q+$(1.3).I()}g 7<=$(f).n().q-1.d};$.D($.P[\':\'],{"Q-H-7":"$.k(a, {d : 0, 3: 4})","R-H-7":"!$.k(a, {d : 0, 3: 4})","S-y-7":"$.l(a, {d : 0, 3: 4})","q-y-7":"!$.l(a, {d : 0, 3: 4})"})})(W);',62,62,'|settings|self|container|window|function|if|fold|var|this||event|attr|threshold|loaded|element|return|scroll|src|else|belowthefold|rightoffold|elements|offset|appear|bind|left|options|original|each|placeholder|effect|temp|true|of|trigger|failurelimit|false|counter|extend|undefined|height|top|the|width|fn|removeAttr|lazyload|grep|show|scrollTop|expr|below|above|right|one|scrollLeft|img|jQuery|load|hide|effectspeed'.split('|'),0,{}))

此外主页上还需要加入如下代码:

1
2
3
4
5
6
7
8
9
<script type="text/javascript">
jQuery(document).ready(
function($){
$("img").lazyload({
     placeholder : "grey.gif",
     effect      : "fadeIn"
});
});
</script>

其中grey.gif为灰白的图片,加载时通过灰白图片逐渐渐变到原图。

解决IE版本不兼容问题


• 在属性前加下划线(_),那么此属性只会被IE6解释
• 在属性前加星号(*),此属性只会被IE7解释
• 在属性值后面加"\9",表示此属性只会被IE8解释


mysql4.0与mysql5.0的区别

mysql4.0与mysql5.0是不兼容的,前几天亲自将mysql5.0转换到低版本的mysql4.0,发现主要有这些不同:

1、mysql4.0 varchar类型最大支持255个字符

2、mysql4.0 不支持多语言,也就是set names utf这样的语句不支持

3、mysql4.0使用的是latin1编码

话说为何要要进行这个转换?无法又被国内的空间服务商给吭了,因为网站被攻击,然后服务商把我的域名剔除了所谓的白名单,还不给回复。然后经过多次涉交和电话联系,再同意更换服务器作为解决办法。但服务器竟然装的是这么低版本的mysql,真的是要让人吐血了。被坑也就坑一次吧,什么买2年送1年,便宜没好货,再次强烈鄙视这个中国合租网

PHP设置时区

前段时间国内买的空间老是出问题,三天两头地需要切换到国外的备份服务器。但是国内和国外的服务器有时差,以前都是手动修改代码,来调整时差。今天才发现,原来可以直接设置时区,避免更换了不同服务器因为不同的时区而重新修改代码了。

普通地在PHP里输出时间代码为:

echo $showtime=date("Y-m-d H:i:s");

一般来说,输出的时间会有8小时的时差,往往后面要加28800进行调整。

其实只要在开头加上代码

date_default_timezone_set('Asia/Shanghai');

将时区设置为固定,那么就不会出现任何时差了。

Godaddy开启GZIP压缩

先介绍下本人在Godaddy上买的空间,无限空间+无限流量+Linux

一开始网上搜索了很多godaddy开启GZIP压缩的方法,但是在漫长等待php配置文件生效之后,发现貌似不太管用。

后来发现godaddy可以直接使用php的内置压缩函数,具体方法如下:

页面顶部加入代码:if(Extension_Loaded('zlib')) Ob_Start('ob_gzhandler');

页面底部加入代码:if(Extension_Loaded('zlib')) Ob_End_Flush();

测试了下很完美,压缩了超过70%

测试地址:http://tool.chinaz.com/Gzips/Default.aspx

此外CSS、JPG、JS等非PHP文件可以通过静态文本调用PHP压缩模块实现GZIP压缩效果,具体实现方法:http://zhiqiang.org/blog/it/speedup-blog-gzip-javascript-css.html

AJAX返回多个数据

网页上需要按一个按钮后多个数据进行刷新,也就是说要通过AJAX返回多个数据并在页面上显示。比较笨的办法一个返回数据新建一个函数,相当于每个数据都通过AJAX进行一次提交,结果常见的错误就是函数中的变量名一致导致提交错误。即使正确,当多次刷新后,往往会出现数据冲突,比如A数据出现在B数据的地方。这个主要是因为获取数据都是通过if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")的语句来判断的,但是多个返回容易产生冲突,前一个刚判断状态后一个数据就来了,结果后一个数据代替了前一个数据。

比较好的方法就是还是一次提交,在PHP页面上同时处理并按照一定格式归并在一起,比如:数据1|数据2|数据3|数据4……。然后再调用返回 数据的时候在JS代码中把数据分割开来,在将数据放入该数据本应该存放的位置。

处理代码如下:

1
2
3
4
5
6
7
8
9
10
11
function test()/*通过AJAX,检验输入数据的格式并返回相应的值*/
{
    if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
    {
        var str=xmlHttp.responseText
        var reback=new Array()
        reback=str.split("-")
        document.getElementById("data1").value=reback[0]
        document.getElementById("data2").value=reback[1]
    }
}

chrome与IE的一些细微差别

相对于IE,chrome对网页代码要求更为严格,IE对于网页代码中的错误有很高的容错性。容错性好也就意味着兼容性相对更很出色。这里举两个例子

1、在一个页面通过POST方法提交变量到Sroan.php,而Sroan.php里使用get方法获取所要提交的方法,在IE中测试,IE可以返回正常,也就是容错了获取方法的不同。而在chrome中,获取的变量为空。

2、在chrome中路径"../Sroan.php"与"sroan.php"是不同的,前者等价于"../",而在IE中两者是等价的。