Thursday, September 16, 2010
保留小数点后两位的方法
2. echo sprintf("%.2f", $a);
3. 直接在数据库中设置数据类型为 decimal(28,2)
PS: round是对float本身进行加工,如果float本身就符合你的精度要求,就不会有任何改变,所以你用round还是不行
而sprintf则是对输出就是加工. 已经是字符串了, 想怎么弄就怎么弄
PS2: 选自《CSDN 社区电子杂志——C/C 杂志》
在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。
sprintf 是个变参函数,定义如下:
int sprintf( char *buffer, const char *format [, argument] ... );
除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:
格式化字符串上。
printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要 的字符串。
格式化数字字符串
sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf 在大多数场合可以替代
itoa。
如:
//把整数123 打印成一个字符串保存在s 中。
sprintf(s, "%d", 123); //产生"123"
可以指定宽度,不足的左边补空格:
sprintf(s, "��", 123, 4567); //产生:" 123 4567"
当然也可以左对齐:
sprintf(s, "%-8d�", 123, 4567); //产生:"123 4567"
也可以按照16 进制打印:
sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 个位置,右对齐
sprintf(s, "%-8X", 4568); //大写16 进制,宽度占8 个位置,左对齐
这样,一个整数的16 进制字符串就很容易得到,但我们在打印16 进制内容时,通常想要一种左边补0 的等宽格式,那该怎么做呢?很简单,在表示宽度的数字前面加个0 就可以了。
sprintf(s, "X", 4567); //产生:"000011D7"
上面以”%d”进行的10 进制打印同样也可以使用这种左边补0 的方式。
这里要注意一个符号扩展的问题:比如,假如我们想打印短整数(short)-1 的内存16 进制表示形式,在Win32 平台上,一个short 型占2 个字节,所以我们自然希望用4 个16 进制数字来打印它:
short si = -1;
sprintf(s, "X", si);
产 生“FFFFFFFF”,怎么回事?因为spritnf 是个变参函数,除了前面两个参数之外,后面的参数都不是类型安全的,函数更没有办法仅仅通过一个“%X”就能得知当初函数调用前参数压栈时被压进来的到底 是个4 字节的整数还是个2 字节的短整数,所以采取了统一4 字节的处理方式,导致参数压栈时做了符号扩展,扩展成了32 位的整数-1,打印时4 个位置不够了,就把32 位整数-1 的8 位16 进制都打印出来了。
如果你想看si 的本来面目,那么就应该让编译器做0 扩展而不是符号扩展(扩展时二进制左边补0 而不是补符号位):
sprintf(s, "X", (unsigned short)si);
就可以了。或者:
unsigned short si = -1;
sprintf(s, "X", si);
sprintf 和printf 还可以按8 进制打印整数字符串,使用”%o”。注意8 进制和16 进制都不会打
印出负数,都是无符号的,实际上也就是变量的内部编码的直接的16 进制或8 进制表示。
控制浮点数打印格式
浮点数的打印和格式控制是sprintf 的又一大常用功能,浮点数使用格式符”%f”控制,默认保
留小数点后6 位数字,比如:
sprintf(s, "%f", 3.1415926); //产生"3.141593"
但有时我们希望自己控制打印的宽度和小数位数,这时就应该使用:”%m.nf”格式,其中m 表
示打印的宽度,n 表示小数点后的位数。比如:
sprintf(s, ".3f", 3.1415626); //产生:" 3.142"
sprintf(s, "%-10.3f", 3.1415626); //产生:"3.142 "
sprintf(s, "%.3f", 3.1415626); //不指定总宽度,产生:"3.142"
注意一个问题,你猜
int i = 100;
sprintf(s, "%.2f", i);
会打出什么东东来?“100.00”?对吗?自己试试就知道了,同时也试试下面这个:
sprintf(s, "%.2f", (double)i);
第 一个打出来的肯定不是正确结果,原因跟前面提到的一样,参数压栈时调用者并不知道跟i相对应的格式控制符是个”%f”。而函数执行时函数本身则并不知道当 年被压入栈里的是个整数,于是可怜的保存整数i 的那4 个字节就被不由分说地强行作为浮点数格式来解释了,整个乱套了。不过,如果有人有兴趣使用手工编码一个浮点数,那么倒可以使用这种方法来检验一下你手工编 排的结果是否正确。
字符/Ascii 码对照
我们知道,在C/C 语言中,char 也是一种普通的scalable 类型,除了字长之外,它与short,
int,long 这些类型没有本质区别,只不过被大家习惯用来表示字符和字符串而已。(或许当年该把
这 个类型叫做“byte”,然后现在就可以根据实际情况,使用byte 或short 来把char 通过typedef 定义出来,这样更合适些)于是,使用”%d”或者”%x”打印一个字符,便能得出它的10 进制或16 进制的ASCII 码;反过来,使用”%c”打印一个整数,便可以看到它所对应的ASCII 字符。以下程序段把所有可见字符的ASCII 码对照表打印到屏幕上(这里采用printf,注意”#”与”%X”合用时自动为16 进制数增加”0X”前缀):
for(int i = 32; i < 127; i ) {
printf("[ %c ]: = 0x%#04X\n", i, i, i);
}
连接字符串
sprintf 的格式控制串中既然可以插入各种东西,并最终把它们“连成一串”,自然也就能够连
接字符串,从而在许多场合可以替代strcat,但sprintf 能够一次连接多个字符串(自然也可以同时
在它们中间插入别的内容,总之非常灵活)。比如:
char* who = "I";
char* whom = "CSDN";
sprintf(s, "%s love %s.", who, whom); //产生:"I love CSDN. "
strcat 只能连接字符串(一段以’\0’结尾的字符数组或叫做字符缓冲,null-terminated-string),但有时我们有两段字符缓冲区,他们并不 是以’\0’结尾。比如许多从第三方库函数中返回的字符数组,从硬件或者网络传输中读进来的字符流,它们未必每一段字符序列后面都有个相应的’\0’来结 尾。如果直接连接,不管是sprintf 还是strcat 肯定会导致非法内存操作,而strncat 也至少要求第一个参数是个null-terminated-string,那该怎么办呢?我们自然会想起前面介绍打印整数和浮点数时可以指定宽度,字符串 也一样的。比如:
char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
char a2[] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'};
如果:
sprintf(s, "%s%s", a1, a2); //Don't do that!
十有八九要出问题了。是否可以改成:
sprintf(s, "%7s%7s", a1, a2);
也没好到哪儿去,正确的应该是:
sprintf(s, "%.7s%.7s", a1, a2);//产生:"ABCDEFGHIJKLMN"
这 可以类比打印浮点数的”%m.nf”,在”%m.ns”中,m 表示占用宽度(字符串长度不足时补空格,超出了则按照实际宽度打印),n 才表示从相应的字符串中最多取用的字符数。通常在打印字符串时m 没什么大用,还是点号后面的n 用的多。自然,也可以前后都只取部分字符:
sprintf(s, "%.6s%.5s", a1, a2);//产生:"ABCDEFHIJKL"
在 许多时候,我们或许还希望这些格式控制符中用以指定长度信息的数字是动态的,而不是静态指定的,因为许多时候,程序要到运行时才会清楚到底需要取字符数组 中的几个字符,这种动态的宽度/精度设置功能在sprintf 的实现中也被考虑到了,sprintf 采用”*”来占用一个本来需要一个指定宽度或精度的常数数字的位置,同样,而实际的宽度或精度就可以和其它被打印的变量一样被提供出来,于是,上面的例子 可以变成:
sprintf(s, "%.*s%.*s", 7, a1, 7, a2);
或者:
sprintf(s, "%.*s%.*s", sizeof(a1), a1, sizeof(a2), a2);
实际上,前面介绍的打印字符、整数、浮点数等都可以动态指定那些常量值,比如:
sprintf(s, "%-*d", 4, 'A'); //产生"65 "
sprintf(s, "%#0*X", 8, 128); //产生"0X000080","#"产生0X
sprintf(s, "%*.*f", 10, 2, 3.1415926); //产生" 3.14"
打印地址信息
有时调试程序时,我们可能想查看某些变量或者成员的地址,由于地址或者指针也不过是个32 位的数,你完全可以使用打印无符号整数的”%u”把他们打印出来:
sprintf(s, "%u", &i);
不过通常人们还是喜欢使用16 进制而不是10 进制来显示一个地址:
sprintf(s, "X", &i);
然而,这些都是间接的方法,对于地址打印,sprintf 提供了专门的”%p”:
sprintf(s, "%p", &i);
我觉得它实际上就相当于:
sprintf(s, "%0*x", 2 * sizeof(void *), &i);
利用sprintf 的返回值
较少有人注意printf/sprintf 函数的返回值,但有时它却是有用的,spritnf 返回了本次函数调用
最终打印到字符缓冲区中的字符数目。也就是说每当一次sprinf 调用结束以后,你无须再调用一次
strlen 便已经知道了结果字符串的长度。如:
int len = sprintf(s, "%d", i);
对于正整数来说,len 便等于整数i 的10 进制位数。
下面的是个完整的例子,产生10 个[0, 100)之间的随机数,并将他们打印到一个字符数组s 中,
以逗号分隔开。
#include
#include
#include
int main() {
srand(time(0));
char s[64];
int offset = 0;
for(int i = 0; i < 10; i ) {
offset = sprintf(s offset, "%d,", rand() % 100);
}
s[offset - 1] = '\n';//将最后一个逗号换成换行符。
printf(s);
return 0;
}
设想当你从数据库中取出一条记录,然后希望把他们的各个字段按照某种规则连接成一个字
符串时,就可以使用这种方法,从理论上讲,他应该比不断的strcat 效率高,因为strcat 每次调用
都需要先找到最后的那个’\0’的位置,而在上面给出的例子中,我们每次都利用sprintf 返回值把这
个位置直接记下来了。
使用sprintf 的常见问题
sprintf 是个变参函数,使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访
问错误,但好在由sprintf 误用导致的问题虽然严重,却很容易找出,无非就是那么几种情况,通
常用眼睛再把出错的代码多看几眼就看出来了。
?? 缓冲区溢出
第一个参数的长度太短了,没的说,给个大点的地方吧。当然也可能是后面的参数的问
题,建议变参对应一定要细心,而打印字符串时,尽量使用”%.ns”的形式指定最大字符数。
?? 忘记了第一个参数
低级得不能再低级问题,用printf 用得太惯了。//偶就常犯。:。(
?? 变参对应出问题
通常是忘记了提供对应某个格式符的变参,导致以后的参数统统错位,检查检查吧。尤
其是对应”*”的那些参数,都提供了吗?不要把一个整数对应一个”%s”,编译器会觉得你
欺她太甚了(编译器是obj 和exe 的妈妈,应该是个女的,:P)。
strftime
sprnitf 还有个不错的表妹:strftime,专门用于格式化时间字符串的,用法跟她表哥很像,也
是一大堆格式控制符,只是毕竟小姑娘家心细,她还要调用者指定缓冲区的最大长度,可能是为
了在出现问题时可以推卸责任吧。这里举个例子:
time_t t = time(0);
//产生"YYYY-MM-DD hh:mm:ss"格式的字符串。
char s[32];
strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", localtime(&t));
sprintf 在MFC 中也能找到他的知音:CString::Format,strftime 在MFC 中自然也有她的同道:
CTime::Format,这一对由于从面向对象哪里得到了赞助,用以写出的代码更觉优雅。
Tuesday, September 14, 2010
Zend Framework之使用Zend_Mail实现邮件验证
Zend Framework 里Zend_Mail这个组件用起来还是很方便的..它提供了通用化的编写与发送文本内容的邮件,当然它也兼容MIME标准的多个多个段的邮件消息的功 能.Zend_Mail里通过默认的Zend_Mail_Transport_SendMail传输或能过 Zend_Mail_Transport_Smtp来发送我们的电子邮件。
Zend_Mail发送最简单的邮件功能.通过Zend_Mail_Transport_Sendmail发来送.我们只要指定邮件的一个收件人,一个主题,一个邮件内容和一个发件人就可以了.它的代码如下(有注解:):
<?php require_once'Zend/Mail.php'; $mail=newZend_Mail("UTF-8");//设置邮件编码 $mail->setBodyText('你的邮件内容放在这里!.') //发送电子邮件地址以及一些发送人的说明信息 ->setFrom('fromemail@example.com','发送人的说明信息') //收信人电子邮件地址以及一些收信人的说明信息 ->addTo('toemail@example.com','收信人的说明信息') //电子邮件标题,解决乱码 ->setSubject("=?UTF-8?B?".base64_encode('电子邮件标题')."?=") ->send(); ?>
另外一个就是通过一个SMTP发送电子邮件.不过你需要配置你的邮件服务器.这一步大家可以去GOOGLE一下..我就不在这里多说了.我这里是能守 GOOGLE来实现发送电子邮件的..经过我的测试.我的电子邮件到送到自己的Gmail和163(网易)的邮箱都没有问题.乱码问题也解决了..标题长 度限制问题也没有出现..以前是自己参考网上改了Zend_Mail里面的函数..现在用1.6版的Zend Framework好像没有这样的问题..我想是ZF团队改了里面的BUG吧...呵呵..
下面是自己的实现的代码:
<?php
require_onceROOT_PATH .'/Zend/Mail.php'; require_onceROOT_PATH .'/Zend/Mail/Transport/Smtp.php'; $mail=newZend_Mail("UTF-8");//设置邮件编码 $config=array('auth'=>'login', 'username'=>"kylingood",//电子件用户名 'password'=>"这里是填写你电子邮件密码", 'ssl'=>"ssl" ); $transport=newZend_Mail_Transport_Smtp('smtp.gmail.com',$config); $mail->setDefaultTransport($transport); $mailcontent='欢迎您的到来!<br /> 您的注册名为: '.$thisArray['username'].'<br /> 您的密码为:'.$thisArray['userpass'].' <br /> 请您点击这里的地址:<a href="#"><font color="red">激活 </font> </a>您的帐号! 请尽快删除此邮件,以免别人偷看到您的密码<br /> 如果忘了密码, 可以到社区写信请管理员重新设定<br />'; $mail->setBodyHtml($mailcontent);//可以发送HTML的邮件.真方便! $mail->setFrom('kylingood@gmail.com','kylingood'); $mail->addTo($email,'kylingood'); $title=$thisArray['username'].',用户您好,这是网站激活验证邮件!'; $mail->setSubject("=?UTF-8?B?".base64_encode($title)."?="); $mail->send(); ?>
好了,大致用Zend_Mail发送邮件就是这个原理,当然还有更多高级点的用法.比如说邮件发送附件。一次性发送多个电子邮件.还有还有就是使用不同的Transport对象来发送不同的邮件。
转自:http://www.zendchina.net/?action-viewnews-itemid-1323
可参考:http://blog.csdn.net/zlb_xidian/archive/2009/08/09/4428756.aspx
Thursday, September 9, 2010
[转载]你用过的厕纸是扔进马桶还是扔进纸篓?
请问各位:你在厕所用过手纸后,是把它扔进冲水马桶冲走,还是扔进纸篓?我本人绝对是扔进马桶冲走。但是据我观察,我们单位以及我去过的公共厕所,人们大多都是把用过的厕纸扔进纸篓——因为那纸篓经常是满满的。这本来似乎是不值一提的小事,但最近居然引起中外“厕所文化”的冲突(见下面转贴的消息)。
实际上,现在的厕纸,完全能在水中充分软化,根本不会堵塞马桶下水道——我家马桶几十年来从未堵塞过就是证明。我看过孩子的一本外国儿童画书(已经译为中文),上面有一幅画配着文字:一头小狮子在坐便上大便完,拟人的马桶“张着大嘴”对它说:“我喜欢吃手纸”,于是小狮子把手纸扔进马桶。这说明外国人从小就教育儿童把用过的厕纸扔进马桶。 的确,在西方、日本等公厕内,你一般见不到马桶旁边有纸篓,即使有,也只是为用过的擦手纸巾或不溶于水的废弃物准备的。
当然,这种习惯不能怪老百姓,因为我们大多数公厕的墙上都贴着:“手纸用过后请扔进纸篓”,而纸篓似乎是公厕马桶间的标准配置。其实中国人的这个习惯是过去用报纸做厕纸代用品时留下的。更早些,可能与过去用茅坑时舍不得把手纸丢掉,因为积攒起来可以卖废纸有关。其实用过的肮脏厕纸丢在纸篓内看上去是令人很不舒服的,而且这肯定是一种污染源。纸篓的设置还给这种充满细菌的手纸回流到废品收购站提供了方便(我就见过收废品的人将其装入蛇皮袋收走),而回收不经严格消毒的手纸是非常恶心而且非常危险的。所以,我们应该坚决改变这个陋习,在用过马桶后,把手纸也丢进去用水冲走。
转帖:凤凰网文章:《中日手纸用法引起“文化摩擦”》(作者:sh-zhang )
最近,随着访日中国游客的不断增多,日本在热烈欢迎中国客人来日消费,拯救日本疲软的观光业和百货零售业,振兴日本经济的同时,也出现了责难中国客人礼仪和习惯问题的声音,这些声音的出现,有的是文化习惯的不同造成的摩擦,有的是对对方的文化不甚了解造成的误解,但是中国人旅日观光,正成为中日经济交往中一项不可缺少的“低炭产业” ,也是促进中日两国人民互相了解,增进友谊的重要途径,而对于这其中发生的文化摩擦,对于中国人来说应该尽量做到“入乡随俗”,比较快地熟悉日本的文化习惯,对于日本人来说,就是要“有容乃大” ,努力了解中国的文化特征和社会发展现状,学习对异文化的宽容态度,只有这样才能促进中日间旅游的健康发展。
随着中国观光游客数目的增加,日本观光地的厕所出现了“异象”。其中最为关注的是在东京的浅草寺公用厕所里用过的手纸不是扔在便池里冲走,而是扔在垃圾箱里。据寺院的人说,这种现象从去年开始急增,特别是中国的团体观光游客来访后尤其普遍。
浅草寺的相关人士称,开始时,他们用繁体汉字写了一则通告贴在厕所内,但“似乎未能把意思传达给中国游客”。现在他们改用简体汉字,希望能减少这种现象。
除了浅草寺,经常有中国旅行团光顾的东京电器大街秋叶原,也遇到了类似问题。
日本有的人认为这是中国人没有礼貌,其实这里有个了解中国文化和现状的问题,中国的下水道和水洗厕所的普及率还很低,就是有水洗厕所的地方,也不一定配备像日本这样在便池里能够融化,并马上冲走的纸张,中国的厕所用纸千差万别,没有统一的用纸,厕所很容易堵塞,在中国一般都在厕所里准备好装用过手纸的纸篓。现在随着中国水洗厕所的不断普及,一些专家也提议厕所不要放纸篓,这样对健康不利,但是由于中国手纸质量千差万别,水压高低不同,要做到日本这样,还需要很常时间的发展,中国客人的这种做法,不是恶意而是好心,他们担心厕所堵塞。其实日本在1963年水洗厕所的普及率才9%,水洗厕所在一般社会普及也是在20世纪80年代后期。
还有的商店,对中国人“砍价”觉得不可思议,日本一般是不砍价的,但是这里首先也有个文化问题,就是中国商业随着市场经济的发展,各种商业形态非常发达,特别是在日本很不发达的自由市场、露天市场,比日本发达得多,一物百价的情况经常出现。第二是日本一些导游,为了取得高额回扣带中国客人去那些不守商业规则的店铺,让中国客人花高价购买商品,还有的导游搞车上贩卖,哄抬物价,搞乱了中国客人的价格感觉。
有的商店也出,中国人经常打开商品的包装,他们对此很不满意。而追其原因,当然有中国人不了解日本的商业习惯的因素,但是中国在现阶段和日本比,商业道德和知识产权意识比较薄弱,中国仿造商品很多,客人在购买商品时不打开包装对于商品的真伪就抱有怀疑。解决这个办法的最好办法就是商家多摆出些样品,增加中国客人对商品的真实性的感官认识。
而今年5月发生在滋贺县滋贺市的一件事,更使文化摩擦升级。在5月份的一个傍晚,住在滋贺市琵琶湖附近的一家旅店里住宿的一群中国游客,在旅店附近散步,由于说话声音大了些,竞被一些住户报警,警察闻讯赶来,大大调查了一番,后来把导游找来,花了好长时间才把事情说清楚,但是中国游客还是战战兢兢,心有余悸。
日本人对中国游客大有怨言,中国游客对日本的服务也有微辞,如一名中国老年游客到日本某机场由于手续问题被困几个小时,其原因之一就是虽有能说中国话的职员,但是由于缺少对中国的情况和背景,中国话根本说不通,使问题的解决增添了不必要的麻烦。有的中国游客受了不良导游的当,高价购买普通商品,发誓再不来日本。
对于这些问题,日本媒体的一些做法值得称道,他们不是听一面之词,贸然报道,而是认真采访《中文导报》等华文媒体,理解中日的文化和发展阶段不同,进行消除文化摩擦的报道,如对于浅草寺的手纸事件,《产经新闻》通过采访《中文导报》指出:这是由于两国厕所文化存在差异,“中国游客并非恶意而为,他们是因为想到‘堵塞马桶就糟糕了’,才将手纸丢在外面的。”而日本人就没有这样的担心,他们如厕后直接将手纸丢进马桶冲走。
而日本富士电视台对这一事件不仅采访了《中文导报》,也采访了台湾的一名游客,台湾游客也说:台湾的手纸也比较厚,不容易冲走,同时也播放了《中文导报》建议:那就是清楚告诉游客,这样的纸扔在便池里不会堵塞,请安心,中国游客就会放心这样做的。
富士电视台还指出∶中国把用过的手纸扔在纸篓里才是礼貌。日本刚刚出现座便时还有人在里洗脸。看来文化的互相理解还需要相当长的时间。
由此可见,要想使中日间的旅游事业进行下去,中国人要快速“入乡随俗” ,同时克服在禁烟区吸烟、插队、随地吐痰、大声喧哗等习惯,而日本接待方面也要加深理解中国的发展阶段和不同的文化,“有大乃容”,不要把自己的文化作为唯一的尺度衡量外国游客,并由此产生拒绝和排斥的心理。
据日本旅游相关人士透露,作为“民间大使”的导游应该在消解文化摩擦上起重大作用,如果是对日本文化和习惯比较了解并有责任心的导游,会在事前向中国游客说明这些问题,这样的文化摩擦也就不会出现,但是现在无资格导游横行,有的不仅无能力说明这些问题,而且还为了取得高额回扣带中国客人到不守商业规则的店去,或在车上高高价贩卖,既破坏了日本的旅游市场,也损坏了中国游客的日本旅游心理。
精选15个国外CSS框架
什么是css框架
实际上还是让我们从框架说起吧。
框架就是一个你可以用于你的网站项目的基本的概念上的结构体。
css框架通常只是一些css文件的集合,这些文件包括基本布局、表单样式、网格或简单结构、以及样式重置。比如:
- typography.css 基本排版规则
- grid.css 基于网格的布局
- layout.css 通常的布局
- form.css for 表单样式
- general.css 更多通用规则
您还可以参考以下前端开发/CSS相关资源:
《推荐12款可用于前端开发的免费文本编辑器》
《Web前端开发必备手册下载》
《推荐20个让你学习并精通CSS的网站》
《300+Jquery, CSS, MooTools 和 JS的导航菜单资源》
下面一起来了解一下各种不同的CSS框架吧:
1.960 Grid System
960网格系统是一个通过提供通常使用的尺寸简化网站开发流程的努力的结果,基于960像素的页面宽度。它有两种类型,12和16列,他们可以独立使用或是协同使用。
2.WYMstyle CSS Framework
这个项目的目的是提供一组经过良好测试的模块化的CSS文件,能够用于网站的快速设计。WYMstyle是一组CSS文件,你可以很容易的组合这些文件来快速的创建你的网站的布局。通过提供可靠的、经过良好测试的CSS模块,WYMstyle 力求让每个网站防止枯燥的跨浏览器兼容性测试。
3.YAML CSS Framework
Dirk Jesse的强大的(X)HTML/CSS框架为许多的简单或更复杂的网站项目提供完整的默认模板包。YAML基于网页标准并支持所有现代浏览器。所有的 Internet Explorer的主要渲染漏洞都被解决。YAML 完全支持从5.x到7.0的所有的IE版本。
4.YUI Grids CSS
基本的YUI网格CSS提供4种预设的页宽、6种预设模板和再分为2、3、4卷的区块的功能。 这个4KB的文件可提供超过1000中页面布局组合。
有国外作者曾指出YUI Grids CSS中最值得学习的网格布局CSS写法:
- 负Margin技术
- 使用度量单位em
- 清除布局的浮动
5.Logicss Framework
Logic CSS 框架是用来减少开发符合web标准的xHTML布局的时间的一个由CSS文件和PHP程序组成的集合。通常跨浏览器表现行为(不是Meyer的reset 文件或是用“*”),排版支持文本字体大小调整(使用EMs) 和垂直居中,符合可定义的灵活的布局网格利用css代码生成工具。
6.CleverCSS
CleverCSS是一个用于css的受Python启发的小型的标记语言,它可用于以整洁的和结构化的方式创建一个样式表。在很多方面它都比 CSS2整洁和强大。与CSS最明显的区别是句法:它基于缩进而且不单调。虽然这显然违反了Python的规则,它依然是组织样式的很好的主意。
7.Elements CSS Frameworks
Elements 是一个实用的CSS框架。它是为了帮助设计师更快更高效的来写CSS而建立。Elements 已经超越了仅仅作为一个框架,它有自己的项目工作流。它拥有你完成项目所需的所有东西,这也让你和你的浏览者感到愉悦。阅读 概述 了解更多。
8.Blueprint CSS
Blueprint 是一个 CSS 框架,它的目的是减少你的css开发时间。它提供一个可靠的css基础去创建你的项目,BP由一个易用的网格、合理的布局和一个打印样式。
9.Schema Web Design Framework
Schema 是一个为了提供在重复的设计任务中必须的CSS和HTML标签而设计的表现层的网页框架设计。 与为每一个新的网站项目从零开始创建HTMl/CSS不同,Schema提供必要的基础来开始并立马让你的设计跑起来。
10.Emastic CSS Framework
Emastic 是一个CSS框架,它有连续的任务:探索陌生的新世界,寻找新生活和新的网站空间,大胆的去CSS框架尚未到达的领域。它是轻量的、在页面宽度上比较人性化,在网格中使用固定和不固定的列宽。 Elastic 用“em”布局。
11.That Standards Guy CSS Framework
* 只能调用单个样式文件
* 主样式需要取得CSS认证(WCAG 1.0);
* 跨浏览器兼容性—包括Internet Explorer (IE) 5.x for Mac;
* IE Hacks使用独立文件;
* 快速创建模板;
* 少量注释/实例演示,可以节省时间来理解。
12.Content with Style Framework
下一个逻辑步骤就是将这个扩展为CSS框架,允许使用写好并通过测试的组件来快速开发网站。实际上所需的是搞定一套命名习惯和一个灵活的基本模板…
13.Boilerplate CSS Framework
14.ESWAT Web Project Framework
ESWAT正在重新整理。如果你是冲着我的网站框架来的,那么你就可以在这里下载。也许你也想看看我的其他项目gmachina、AppleSeed。
15.Tripoli CSS Framework
Tripoli是一个用于HTML表现的通用css规范。通过重设和重建浏览器标准,Tripoli 为你的网站项目提供了一个标准的、跨浏览器表现的基础。
彬Go会经常更新前端开发/网页设计等相关技术及教程文章,欢迎订阅本博客来及时浏览本博客的最新教程及资源。
15款提高表格操作的jQuery插件
table表格由于它的浏览器兼容性和复杂的标签嵌套方式,可以算是添加样式最困难的对象之一了。大多数前端er都把网页中的table标签替 换为div,主要就是因为div要比table更容易添加CSS样式。但是我们在日常应用中仍然要用到table表格,其中最好的例子就是对照表。今天彬 Go将向大家推荐15个jQuery表格插件让你对数据表格进行显示、排序、筛选和操控。如jQuery表格排序插件、jQuery表格拖拽插件、jQuery树形表格插件、设置颜色、点击、替换等效果。
您还可以参考以下javascript相关资源:
《推荐9款很棒的网页绘制图表JavaScript框架脚本》
《了解jQuery技巧来提高你的代码》
《10种JavaScript特效实例让你的网站更吸引人》
《300+Jquery, CSS, MooTools 和 JS的导航菜单资源》
1.DataTables-强大的jQuery表格插件

DataTables是提供了大量特性的强大jQuery表格插件。例如:你可以自动轻松筛选、Ajax预读取数据、分页、列排序、高亮排序列、扩展插件支持、使用CSS或jQuery UI ThemeRoller 定制主题和完整文档。
2.uiTableFilter-jQuery表格过滤插件

uiTableFilter是一个用于表格行筛选的jQuery插件。插件作者提供了详细的例子来告诉大家如何将自己的表格和插件整合在一起并完成表格筛选。
3.Scrollable HTML Table-jQuery表格滚动插件

Scrollable HTML Table jQuery插件可以让你的表格变得可以滚动控制。
4.Tablesorter-jQuery表格排序插件

Tablesorter这个jQuery插件是用来将一个包含thead和tbody标签的标准HTML表格转变为无页面刷新的可排序表格。它不但支持多列排序,而且跨浏览器兼容并且能通过widget系统进行扩展。
5.Flexigrid-Web2.0 jQuery表格插件

Flexigrid 是一个轻量级的Web2.0 jQuery插件。它包含很多非常Cool的特性,如主题定制、分页、工具栏、搜索、排序、ajax读取数据源、调整列宽高尺寸等。
6.HeatColor-jQuery表格颜色插件

HeatColor可以让你根据元素的值来为元素设置颜色。 它的值的比对时根据预设的一个范围来进行比较,最后对他们自动进行颜色值的设置。
7.JQTreeTable-jQuery树形表格插件

使用JQTreeTable插件你可以得到一个树形表格,如果用户的浏览器禁用了JavaScript,那么他们也能看到普通形式的表格,并不影响可访问性。
8.Ingrid-jQuery表格插件

Ingrid是另一个数据表jQuery插件。它也有很多特性,比如列调整尺寸、排序、行列添加样式等。在作者网站提供了很棒的文档来告诉大家如何从头使用这个jQuery表格插件。
9.jQuery ColumnManager plugin

columnManager是可以控制任意表格列显示或隐藏的jQuery插件,而且它可以保存当前表格的状态至你下次访问。这个jQuery插件非常小巧轻量,仅3.6kb。
10.jQuery treeTable-jQuery树形表格插件

jQuery treeTable是小型的JQTreeTable, 它也能让你的table显示成树形结构. 这个插件也可以在浏览器禁用JavaScript时保持文档整洁并让原始table可以使用.
11.CSV2Table-CSV格式读取表格插件

CSV2Table 可以读取CSV文件,它从CSV文件中读取内容并创建成table表格.
12.Table Pagination-jQuery表格分页插件

这个jQuery表格分页插件可以在表格下面创建分页元素,你还可以通过各种设置来定制分页。
13.jQuery TableRowCheckboxToggle

这个jQuery表格插件可以让你再点击表格行的时候改变多选框状态并修改该行CSS样式。
14.Table Drag and Drop jQuery plugin-jQuery表格拖拽插件
这个简单的jQuery插件可以让用户使用拖拽行的方式重新排列表格各行,任意单独行可以设置为不可拖拽和/或不可放置。
15.uiTableEdit
uiTableEdit是由Greg Weber制作的很酷的jQuery表格编辑插件,它允许用户编辑表格内容。
英文原文:15 Great jQuery Plugins For Better Table Manipulation
翻译原文:15款提高表格操作的jQuery插件(彬Go)
如何固定表格宽度
<TABLE style="table-layout: auto | fixed">
auto: 默认值
fixed: 宽度固定,截断超出的内容
<TABLE style="word-break: normal | break-all | keep-all">
normal: 默认值,按字词截断换行
break-all: 强行截断并换行
keep-all: 不截断不换行
使用:style="table-layout:fixed;"
表示输出停止,停留在设定的长度内.
使用:style="word-break : break-all;"
表示对超长部分,换行再继续显示.
对于在英文中使用,请使用style="table-layout:fixed; word-wrap:break-word"
推荐使用word-wrap:break-word;word-break:break-all;table-layout:fixed;
==============================================================================
word-wrap同word-break的区别
word-wrap:
normal Default. Content exceeds the boundaries of its container.
break-word Content wraps to next line, and a word-break occurs when necessary. 必要时会触发word-break。
word-break:
normal Default. Allows line breaking within words. 好像是只对Asian text起作用。
break-all Behaves the same as normal for Asian text, yet allows the line to break arbitrarily for non-Asian text. This value is suited to Asian text that contains some excerpts of non-Asian text.
keep-all Does not allow word breaking for Chinese, Japanese, and Korean. Functions the same way as normal for all non-Asian languages. This value is optimized for text that includes small amounts of Chinese, Japanese, or Korean.
总结如下:
word-wrap是控制换行的。
使用break-word时,是将强制换行。中文没有任何问题,英文语句也没问题。但是对于长串的英文,就不起作用。
break-word是控制是否断词的。
normal是默认情况,英文单词不被拆开。
break-all,是断开单词。在单词到边界时,下个字母自动到下一行。主要解决了长串英文的问题。
keep-all,是指Chinese, Japanese, and Korean不断词。即只用此时,不用word-wrap,中文就不会换行了。(英文语句正常。)
ie下:
使用word-wrap:break-word;所有的都正常。
ff下:
如这2个都不用的话,中文不会出任何问题。英文语句也不会出问题。但是,长串英文会出问题。
为了解决长串英文,一般用word-wrap:break-word;word-break:break-all;。但是,此方式会导致,普通的英文语句中的单词会被断开(ie下也是)。
目前主要的问题存在于 长串英文 和 英文单词被断开。其实长串英文就是一个比较长的单词而已。
即英文单词应不应该被断开那?那问题很明显了,显然不应该被断开了。
对于长串英文,就是恶意的东西,自然不用去管了。但是,也要想些办法,不让它把容器撑大。
用:overflow:auto; ie下,长串会自动折行。ff下,长串会被遮盖。
所以,综上,最好的方式是word-wrap:break-word;overflow:hidden;而不是word-wrap:break-word;word-break:break-all;。
word-wrap:break-word;overflow:auto;在ie下没有任何问题。在ff下,长串会被遮住部分内容。
另,测试代码如下:
1.htm===================================================================
<style>
.c1{ width:300px; border:1px solid red}
.c2{ width:300px;word-wrap:break-word; border:1px solid yellow}
.c3{ width:300px;word-wrap:break-word;word-break:break-all; border:1px solid green}
.c4{ width:300px;word-wrap:break-word;word-break:keep-all; border:1px solid blue}
.c5{ width:300px;word-break:break-all; border:1px solid black}
.c6{ width:300px;word-break:keep-all; border:1px solid red}
.c7{ width:300px;word-wrap:break-word;overflow:auto; border:1px solid yellow}
</style>
.c1{ width:300px; border:1px solid red}
<div class="c1">
safjaskflasjfklsajfklasjflksajflksjflkasjfksafj
</div>
<div class=c1>
This is all English. This is all English. This is all English.
</div>
<div class=c1>
全是中文的情况。全是中文的情况。全是中文的情况。
</div>
<div class=c1>
中英文混排的情况。Chinese and English. 中英文混排的情况。Chinese and English.
</div>
<br>
.c2{ width:300px;word-wrap:break-word; border:1px solid yellow}
<div class="c2">
safjaskflasjfklsajfklasjflksajflksjflkasjfksafj
</div>
<div class=c2>
This is all English. This is all English. This is all English.
</div>
<div class=c2>
全是中文的情况。全是中文的情况。全是中文的情况。
</div>
<div class=c2>
中英文混排的情况。Chinese and English. 中英文混排的情况。Chinese and English.
</div>
<br>
.c3{ width:300px;word-wrap:break-word;word-break:break-all; border:1px solid green}
<div class="c3">
safjaskflasjfklsajfklasjflksajflksjflkasjfksafj
</div>
<div class=c3>
This is all English. This is all English. This is all English.
</div>
<div class=c3>
全是中文的情况。全是中文的情况。全是中文的情况。
</div>
<div class=c3>
中英文混排的情况。Chinese and English. 中英文混排的情况。Chinese and English.
</div>
<br>
.c4{ width:300px;word-wrap:break-word;word-break:keep-all; border:1px solid blue}
<div class="c4">
safjaskflasjfklsajfklasjflksajflksjflkasjfksafj
</div>
<div class=c4>
This is all English. This is all English. This is all English.
</div>
<div class=c4>
全是中文的情况。全是中文的情况。全是中文的情况。
</div>
<div class=c4>
中英文混排的情况。Chinese and English. 中英文混排的情况。Chinese and English.
</div>
<br>
.c5{ width:300px;word-break:break-all; border:1px solid black}
<div class="c5">
safjaskflasjfklsajfklasjflksajflksjflkasjfksafj
</div>
<div class=c5>
This is all English. This is all English. This is all English.
</div>
<div class=c5>
全是中文的情况。全是中文的情况。全是中文的情况。
</div>
<div class=c5>
中英文混排的情况。Chinese and English. 中英文混排的情况。Chinese and English.
</div>
<br>
.c6{ width:300px;word-break:keep-all; border:1px solid red}
<div class="c6">
safjaskflasjfklsajfklasjflksajflksjflkasjfksafj
</div>
<div class=c6>
This is all English. This is all English. This is all English.
</div>
<div class=c6>
全是中文的情况。全是中文的情况。全是中文的情况。
</div>
<div class=c6>
中英文混排的情况。Chinese and English. 中英文混排的情况。Chinese and English.
</div>
<br>
.c7{ width:300px;word-wrap:break-word;overflow:auto; border:1px solid yellow}
<div class="c7">
safjaskflasjfklsajfklasjflksajflksjflkasjfksafj
</div>
<div class=c7>
This is all English. This is all English. This is all English.
</div>
<div class=c7>
全是中文的情况。全是中文的情况。全是中文的情况。
</div>
<div class=c7>
中英文混排的情况。Chinese and English. 中英文混排的情况。Chinese and English.
</div>
转自:http://blog.csdn.net/cjh47349038/archive/2009/04/09/4058680.aspx
Wednesday, September 8, 2010
CSS实现将div固定在页面指定地方
要是能做到平滑的,一点都看不出来的技术来达到这种效果,恐怕只有css了。
<head>
<title></title>
<style type="text/css">
html,body {
overflow:hidden;
margin:0px;
width:100%;
height:100%;
}
.virtual_body {
width:100%;
height:100%;
overflow-y:scroll;
overflow-x:auto;
}
.fixed_div {
position:absolute;
z-index:2008;
bottom:20px;
left:40px;
width:800px;
height:40px;
border:1px solid red;
background:#e5e5e5;
}
</style>
</head>
<body>
<div class="fixed_div">I am still here!</div>
<div class="virtual_body">
<div style="height:1800px;">
I am content !
</div>
</div>
</body>
</html>
效果非常好,呵呵。
转自:http://blog.csdn.net/xieyaa/archive/2009/07/20/4363981.aspx
Monday, September 6, 2010
phpmyadmin如何修改root的 密码
第一:打开phpmyadmin会在下方看到提示,root用户没有设置密码,我们先为root帐户设置密码。点击phpmyadmin页面中部的“权限”,可以看到“用户一览”,这时候应该只有一行用户信息,即root localhost这一行,点击这一行最右侧的编辑权限图标,在新页面找到“更改密码”,为root用户设置密码,并点击“执行”。
第二:打开 config.inc.php 里面找到下面这行
$cfg['Servers'][$i]['password'] = '';
引号里就是你想要设置的密码
PS:WAMPServer这个软件自带的phpmyadmin不能启用用户登入,可以下载最新版PHPMYADMIN替换即可
Friday, September 3, 2010
打呼噜 呀 打呼噜
治疗打呼噜的毛病小方法
1.睡眠时尽量保持侧卧姿势,避免仰面躺睡,这样能起到减轻咽喉部阻塞,防止舌根后坠,有利于呼吸顺畅。 2.睡前不要饮酒,不服安眠药、镇静剂、抗组织胺等药物。以上这些只会使你的睡眠程度变浅,睡眠速度变慢。 3.戒烟。烟气会刺激鼻腔内部组织,使其肿胀,致使气道变窄,甚至堵塞。
4.发现鼻炎、鼻息肉等症,应及早治愈。
5.加强体育锻炼(最好是登山跑步等),减轻体重,防止颈脖变粗,增大肺活量,激活肺部功能。
最根本的方法是增强咽腔肌肉的力量。独家奉献自创的除鼾大法,彻底根治顽固呼噜的练习:
【1】伸舌头练习。尽力把舌头伸出,缩回来再尽力伸出,如此循环。每天有空就做,一次做至少100下以上,直到咽腔感觉很酸。
【2】干漱口练习。不含水,把腮帮子鼓起来,再缩回去,如此循环。每天有空就做,一次做至少100下以上,直到咽腔感觉很酸。
【3】扫牙龈练习。用舌头快速扫过牙齿外侧(脸颊侧)的牙龈,先舔上颚的牙龈,快速从左扫到右,再从右扫到左,一次做50下以上。然后同法舔下颚的牙龈。每天有空就做,直到咽腔感觉很酸。
这三个练习能够显著锻炼咽腔肌肉,特别是软腭和舌根的肌肉。初次锻炼时,做到50下,就感觉咽腔很酸,这恰好证明了原来的肌肉是很无力的,急需锻炼。
http://zhidao.baidu.com/question/99219881.html?si=3&wtp=wk
日常生活忌三害
一害为之“早酒”。清晨人体无食腹空,此时饮酒对健康不利。民间有句谚语:“莫饮卯时酒,昏昏醉到酉”。
二害为之“晚茶”。茶有兴奋作用,睡前饮浓茶,会使大脑兴奋难以入睡,也会胡梦颠倒,睡眠不好,尤其有神经病者,更应引起注意。
三害为之“五更色”。即夫妻起床前过性生活。因为马上起床,进入白天的繁忙紧张工作、学习。过性生活后,得不到充分休息,影响身体抵抗力,尤其男士更应注意。
Thursday, September 2, 2010
PHPExcel 循环列
//Column width
for($i=ord('A');$i<=ord('Z');$i++){
$objActSheet->getColumnDimension(chr($i))->setWidth(12);
}
============================================================
PHP ord() 函数
定义和用法
ord() 函数返回字符串第一个字符的 ASCII 值。
语法
ord(string)
参数 | 描述 |
---|---|
string | 必需。要从中获得 ASCII 值的字符串。 |
例子
<?php echo ord("h"); echo ord("hello"); ?>
输出:
104 104
PHP chr() 函数
定义和用法
chr() 函数从指定的 ASCII 值返回字符。
语法
chr(ascii)
参数 | 描述 |
---|---|
ascii | 必需。ASCII 值。 |
提示和注释
注释:ascii 参数可以是十进制、八进制或十六进制。通过前置 0 来规定八进制,通过前置 0x 来规定十六进制。
例子
<?php echo chr(52); echo chr(052); echo chr(0x52); ?>
输出:
4 * R