发表于: lnmp | 作者: | 日期: 2008/11/14 06:11
标签:

PHP中的时间有2个格式化函数:date()和gmdate(),在官方的文档中的描述为:

  date — 格式化一个本地时间/日期

  gmdate — 格式化一个 GMT/UTC 日期/时间,返回的是格林威治标准时(GMT)。

  举个例子,我们现在所在的时区是+8,那么服务器运行以下脚本返回的时间应该是这样的:

  当前时间假定是2007-03-14 12:15:27

  echo date(‘Y-m-d H:i:s’, time()); 输出为:2007-03-14 12:15:27

  echo gmdate(‘Y-m-d H:i:s’, time()); 输出为:2007-03-14 04:15:27

  但是这只是在Linux+Apache下运行PHP所得的结果,如果在Windows下运行,则2个函数返回都是:2007-03-14 04:15:27。

  所以,我们应该给一个兼容性的写法,统一使用gmdate,并手工设置当前时区,写法改进如下:

  echo gmdate(‘Y-m-d H:i:s’, time() + 3600 * 8);

  这样不管在Linux+Apache下还是Windows下都得到了正确的结果,当然这样写还有一个好处,当网站是面向全世界的时候,那么网站用户只要设置所在的时区,程序自动根据用户设置的时区进行时间计算,数据库中信息发布时间只存当前的time()所生成的时间,那么在中国+8时区看到的发布时间是:2007-03-14 12:15:27,那么在欧洲+2时区用户看到这个信息的发布时间是:2007-03-14 06:15:27,这样信息的时间就全部对应正确了。

评论关闭
发表于: sitebuild | 作者: | 日期: 2008/11/14 06:11

CSS属性 border-collapse 边框合并属性
说明
该CSS属性用来设定表格的行和列的边框是合并成单边框,还是分别有各自的边框。

值:collapse | separate | inherit

可用值 值的说明
separate 缺省值。边框分开,不合并。
collapse 边框合并。即如果相邻,则共用同一个边框。

示例代码
<table style=”border-collapse:collapse”>
继承

适用于
表格元素

评论关闭
发表于: sitebuild | 作者: | 日期: 2008/11/14 06:11
标签:

em
相对长度单位。相对于当前对象内文本的字体尺寸。
如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。

ex
相对长度单位。相对于字符“x”的高度。此高度通常为字体尺寸的一半。
如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。

px
像素(Pixel)。相对长度单位。
像素是相对于显示器屏幕分辨率而言的。譬如,WONDOWS的用户所使用的分辨率一般是96像素/英寸。而MAC的用户所使用的分辨率一般是72像素/英寸。

pt
点(Point)。绝对长度单位。

em vs px

em指字体高,任意浏览器的默认字体高都是16px。所以未经调整的浏览器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em。为了简化font-size的换算,需要在css中的body选择器中声明Font-size=62.5%,这就使em值变为16px*62.5%=10px, 这样12px=1.2em, 10px=1em, 也就是说只需要将你的原来的px数值除以10,然后换上em作为单位就行了。

em有如下特点:
1. em的值并不是固定的;
2. em会继承父级元素的字体大小。

长度单位优化方法:

1. body选择器中声明Font-size=62.5%;

2. 将你的原来的px数值除以10,然后换上em作为单位;

简单吧,如果只需要以上两步就能解决问题的话,可能就没人用px了。经过以上两步,你会发现你的网站字体大得出乎想象。因为em的值不固定,又会继承父级元素的大小,你可能会在content这个div里把字体大小设为1.2em, 也就是12px。然后你又把选择器p的字体大小也设为1.2em,但如果p属于content的子级的话,p的字体大小就不是12px,而是1.2em=1.2 * 12px=14.4px。这是因为content的字体大小被设为1.2em,这个em值继承其父级元素body的大小,也就是16px * 62.5% * 1.2=12px, 而p作为其子级,em则继承content的字体高,也就是12px。所以p的1.2em就不再是12px,而是14.4px。

3. 重新计算那些被放大的字体的em数值。避免字体大小的重复声明,也就是避免以上提到的1.2 * 1.2= 1.44的现象。比如说你在#content中声明了字体大小为1.2em,那么在声明p的字体大小时就只能是1em,而不是1.2em, 因为此em非彼em,它因继承#content的字体高而变为了1em=12px。

4.以上方法得到的12px(1.2em)大小的汉字在IE中并不等于直接用12px定义的字体大小,而是稍大一点。解决方法:只需在body选择器中把62.5%换成63%就能正常显示了。
http://hi.baidu.com/toall/blog/item/d5f652fb337093146c22eb4e.html

评论关闭
发表于: sitebuild | 作者: | 日期: 2008/11/14 05:11
标签: ,

一篇关于prototype的入门文章,浅显易懂。
from:http://dev.csdn.net/article/84222.shtm

如何在Javascript实现OO编程?恐怕最好的方式就是充分利用prototype属性。关于prototype的介绍有很多,我就不赘述了。比较基本的原理是,当你用prototype编写一个类后,当你new一个新的object,浏览器会自动把prototype中的内容替你附加在object上。这样,通过利用prototype,你也就实现了类似OO的Javascript。

在Javascript中,object就是一个associative array。一个function就是一个类。当你编写如下function时,其实就是定义了一个类,该function就是它的构造函数。

function MyObject(name, size)

{

this.name = name;

this.size = size;

}

之后,你可以方便的通过MyObject类的prototype属性来方便的扩充它。比如,你可以给他添加其他的属性和方法。

MyObject.prototype.tellSize = function()

{

return “size of “+this.name+” is “+this.size;

}

MyObject.prototype.color = “red”;

MyObject.prototype.tellColor = function()

{

return “color of “+this.name+” is “+this.color;

}

var myobj1 = new MyObject(“tiddles”, “7.5 meters”);

domDiv.innerHTML += myobj1.tellColor()+”<br/>”;

你可以想象,当你调用tellColor()方法后,结果是这样的:

color of tiddles is red

很方便的是,prototype属性可以动态添加。比如,你需要往MyObject中加入一个height属性,并希望其提供一个tellHeight()方法来获得height属性的值。你可以在上面的代码后,继续添加如下的代码:

MyObject.prototype.height = “2.26 meters”;

MyObject.prototype.tellHeight = function()

{

return “height of “+this.name+” is “+this.height;

}

之后,你可以访问一下myobj1的tellHeight()方法,你可以得到如下的结果:

height of tiddles is 2.26 meters

prototype的这些动态的特性看起来有些迷人,不过我倒是反而觉得有些凉飕飕的。确实,这些特性给你很大的灵活性,可以给与你runtime改变类属性和方法的能力。不过,稍微发掘一下,会有些不良的习惯产生。

首先,如果可以动态添加属性和方法,那么很容易让人想到,当我调用时,我想要调用的属性或者方法存在不?这是一个很严肃的问题,如果当我们调用时根本没有该属性或者方法,将可能导致我们的脚本down掉。

不过也有解决办法。比如,在上面的代码中,当还没有tellHeight()方法时,我们可以如下编写代码避免发生错误:

if (myobj1.tellHeight)

{

domDiv.innerHTML += myobj1.tellHeight()+”<br/>”;

}

注意,一定要在if语句中,不要加方法后面的那对(),否则,直接就down掉了。有兴趣的读者可以打印一下,看看分别访问myobj1.tellHeight和myobj1.tellHeight()时有什么区别。

也许,你觉得这个是小意思。加个判断嘛,不就好了?

对,但是下面一个问题更令人头痛。

属性和方法在不在的问题简单,可是属性和方法变不变化的问题可就严重了。在不在我们可以检测,变不变呢?比如,请看下面的代码:

function MyObject(name, size)

{

this.name = name;

this.size = size;

}

MyObject.prototype.color = “red”;

MyObject.prototype.tellColor = function()

{

return “color of “+this.name+” is “+this.color;

}

var myobj1 = new MyObject(“tiddles”, “7.5 meters”);

domDiv.innerHTML += myobj1.tellColor()+”<br/>”;

MyObject.prototype.color = “green”;

domDiv.innerHTML += myobj1.tellColor()+”<br/>”;

该代码将产生如下结果:

color of tiddles is red
color of tiddles is green

请注意,你修改的是类MyObject的color属性。但是你惊奇的看到你之前实例化的对象myobj1的属性值竟然也变化了。天!如果你的项目代码是多人合作,那么,也许某个人会在编程时为了图一己之便,擅自修改你的类。于是,所有人的对象都变化了。于是,你们陷入了漫长的debug过程中。。。。。。(不要说我没有告诉你啊)

上面是属性,还有方法:

function MyObject(name, size)

{

this.name = name;

this.size = size;

}

MyObject.prototype.color = “red”;

MyObject.prototype.tellColor = function()

{

return “color of “+this.name+” is “+this.color;

}

var myobj1 = new MyObject(“tiddles”, “7.5 meters”);

domDiv.innerHTML += myobj1.tellColor()+”<br/>”;

MyObject.prototype.color = “green”;

MyObject.prototype.tellColor = function()

{

return “your color of “+this.name+” is “+this.color;

}

domDiv.innerHTML += myobj1.tellColor()+”<br/>”;

这段代码的结果是:

color of tiddles is red
your color of tiddles is green

哈?原来方法也能变,汗!

问题来了。Javascript太灵活的编程方式多少让人不适应。如果整个Team的水平都比较高还可以,没人会犯这样的错误。但是,当有个毛头小伙子不知情,擅自修改类,将导致所有的人的对象都发生变化,无论是属性还是方法。在Javascript代码变得越来越多的Ajax时代,这是一个严重的问题。

这说明,编写Javascript时,好的编程风格更加重要。记得某人曾经说过这样的话,想Java和C#这些比较严格的语言,虽然降低了灵活性,但也减少了犯错误的可能。这样,即使一个新手,他写出的代码也不会与高手差太多。但是,像Javascript这样的脚本语言,由于太灵活,所以,高手写出的是天使,而新手写的,可能是魔鬼!

参考链接:
http://www.cnblogs.com/goody9807/archive/2007/04/16/715109.html
http://bokee.shinylife.net/blog/article.asp?id=455
http://www.west263.com/info/html/wangyezhizuo/Javascript/20080225/44132.html

评论关闭
发表于: sitebuild | 作者: | 日期: 2008/11/14 05:11

1:
document.all[]

2:
document.表单名称.对象名称.属性值

3:
getElementById()

4:
getElementsByName()

5:
getElementsByTagName()

评论关闭
发表于: sitebuild | 作者: | 日期: 2008/11/14 05:11

基本概念
就像JavaScript语言本身宽松灵活的风格一样,JavaScript数组也具有类似的特性。虽然JavaScript不像java语言,没有有强大的容器框架(List、Set、Map等)的支撑,但JavaScript数组却完全可以模拟出类似的数据结构。

数组的创建

创建一个空数组:

var arr = new Array();

创建一个数组:

var arr = new Array(‘aaa’,’bbb’,’ccc’);

创建一个长度为10的数组:

var arr = new Array(10);

在javascript1.1中,上述语句有效,在javascript1.2中,上述语句将创建一个长度为1内容为10的数组。所以,还是尽量不要使用指定长度的方式来创建数组。

通过数组直接量(javascript1.2)创建数组:

var arr1 = [‘aaa’,’bbb’,’ccc’];

JavaScript的数组同php的数组一样,你可以指定长度,但是却可以随时改变其长度。在JavaScript中,只有那些真正存储在数组中的元素才能够分配到内存。比如声明如下:

arr[0] = ‘aaa’;
arr[1000] = ‘bbb’;

那么,实际分类内存的只有第0号元素和第1000号元素,而1–999号元素并没有分配内存。

数组的元素的访问

同其他语言一样,JavaScript中同样适用[]对数组元素进行访问:


//获取数组的元素值
var testGetArrValue=arrayObj[1];
//给数组元素赋予新的值
arrayObj[1]= “这是新值”;

遍历数组

var strs = new Array(‘aaa’,’bbb’,’ccc’);
for(var i = 0; i < strs.length; i++){ alert(strs[i]); }

数组元素的添加

虽然创建数组的时候我们指定了数组的长度,但却可以随时改变这个值:


var strs = new Array(3);
strs[4] = ‘darkmi’;
for(var i = 0; i < strs.length; i++){ alert(strs[i]); }

该JavaScript代码片段的输出为前三个alert窗口显示“undefined”,第四个alert窗口显示“darkmi”。

另外我们也可以使用JavaScript数组对象的push方法将一个或多个新元素添加到数组结尾,push方法还会返回数组新长度。

push方法的原型如下:

arrayObj. push([item1 [item2 [. . . [itemN ]]]]);

push方法示例:

var strs = [‘aaa’, ‘bbb’, ‘ccc’];
strs.push(‘ddd’, ‘eee’);
for(var i = 0; i < strs.length; i++){ alert(strs[i]); }

unshift方法将一个或多个新元素添加到数组开始,数组中的元素自动后移,返回数组新长度。

unshift方法的原型如下:

arrayObj.unshift([item1 [item2 [. . . [itemN ]]]]);

unshift方法示例:

var strs = [‘ddd’, ‘eee’];
strs.unshift(‘aaa’, ‘bbb’, ‘ccc’);
for(var i = 0; i < strs.length; i++){ alert(strs[i]); }

splice方法将一个或多个新元素插入到数组的指定位置,插入位置的元素自动后移,返回数组新长度。


arrayObj.splice(insertPos,0,[item1[, item2[, . . . [,itemN]]]]);

数组元素的删除

移除最后一个元素并返回该元素值

arrayObj.pop();

移除最前一个元素并返回该元素值,数组中元素自动前移

arrayObj.shift();

删除从指定位置deletePos开始的指定数量deleteCount的元素,数组形式返回所移除的元素。

arrayObj.splice(deletePos,deleteCount);

数组的截取和合并
以数组的形式返回数组的一部分,注意不包括 end 对应的元素,如果省略 end 将复制 start 之后的所有元素

arrayObj.slice(start, [end]);

将多个数组(也可以是字符串,或者是数组和字符串的混合)连接为一个数组,返回连接好的新的数组

arrayObj.concat([item1[, item2[, . . . [,itemN]]]]);

数组的拷贝

返回数组的拷贝数组,注意是一个新的数组,不是指向

arrayObj.slice(0);

返回数组的拷贝数组,注意是一个新的数组,不是指向

arrayObj.concat();

数组元素的排序
反转元素(最前的排到最后、最后的排到最前),返回数组地址

arrayObj.reverse();

反转元素(最前的排到最后、最后的排到最前),返回数组地址

arrayObj.sort();

数组元素的字符串化

返回字符串,这个字符串将数组的每一个元素值连接在一起,中间用 separator 隔开。

arrayObj.join(separator);

评论关闭
发表于: sitebuild | 作者: | 日期: 2008/11/14 11:11









评论关闭
发表于: os/software | 作者: | 日期: 2008/11/14 11:11
标签:
F1 显示当前程序或者windows的帮助内容。
F2 当你选中一个文件的话,这意味着”重命名”
F3 当你在桌面上的时候是打开”查找:所有文件”对话框

F10或ALT 激活当前程序的菜单栏
windows键或CTRL+ESC 打开开始菜单
CTRL+ALT+DELETE 打开任务管理器
DELETE 删除被选择的选择项目,如果是文件,将被放入回收站
SHIFT+DELETE 删除被选择的选择项目,如果是文件,将被直接删除而不是放入回收站
CTRL+INSERT或CTRL+C 复制被选择的项目到剪贴板
SHIFT+INSERT或CTRL+V 粘贴剪贴板中的内容到当前位置
ALT+BACKSPACE或CTRL+Z 撤销上一步的操作
ALT+SHIFT+BACKSPACE 重做上一步被撤销的操作
Windows键+M 最小化所有被打开的窗口。
SHIFT+ WINDOWS+ M 撤消最小化所有窗口。
Windows键+CTRL+M 重新将恢复上一项操作前窗口的大小和位置
Windows键+E 打开资源管理器
Windows键+F 打开”查找:所有文件”对话框
Windows键+R 打开”运行”对话框
Windows键+BREAK 打开”系统属性”对话框
Windows键+CTRL+F 打开”查找:计算机”对话框
SHIFT+F10或鼠标右击 打开当前活动项目的快捷菜单
ALT+F4 关闭当前应用程序
ALT+SPACEBAR 打开程序最左上角的菜单
ALT+TAB 切换当前程序
ALT+ESC 切换当前程序
ALT+ENTER 将windows下运行的MSDOS窗口在窗口和全屏幕状态间切换
PRINT SCREEN 将当前屏幕以图象方式拷贝到剪贴板
ALT+PRINT SCREEN 将当前活动程序窗口以图象方式拷贝到剪贴板
CTRL+F4 关闭当前应用程序中的当前文本(如word中)
CTRL+F6 切换到当前应用程序中的下一个文本(加shift可以跳到前一个窗口)
评论关闭
发表于: sitebuild | 作者: | 日期: 2008/11/14 10:11




aaaa asdfffffffffffffdddddddddd aaa
bbbb xxxx bbbb



word-wrap属性仅作用于有布局的对象,如块对象。内联要素要使用该属性,必须先设定对象的 height 或 width 属性,或者设定 position 属性为 absolute ,或者设定 display 属性为 block 。

评论关闭
发表于: sitebuild | 作者: | 日期: 2008/11/11 01:11
标签:

总结了URL最大长度限制的相关知识。 More …

评论关闭