支持中文字符串的substr
Feb 5th, 2008 - PHP用原始的substr函数截取带中文的字符串,有的时候会把完整的中文
懒腰截断,因为一般英文字母和阿拉伯数字都是一个字节,原始的substr是按一个字是一个字节算的
但是gb2312编码的中文是2个字节,UTF-8编码的中文是3个字节.
所以问题是可以解决的
用原始的substr函数截取带中文的字符串,有的时候会把完整的中文
懒腰截断,因为一般英文字母和阿拉伯数字都是一个字节,原始的substr是按一个字是一个字节算的
但是gb2312编码的中文是2个字节,UTF-8编码的中文是3个字节.
所以问题是可以解决的
Part1
1.在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题。
2.尽量的少进行文件操作,虽然PHP的文件操作效率也不低的。
3.优化Select SQL语句,在可能的情况下尽量少的进行Insert、Update操作。
4.尽可能的使用PHP内部函数(但是我却为了找个PHP里面不存在的函数,浪费了本可以写出一个自定义函数的时间,经验问题啊!)。
5.循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?)。
6.多维数组尽量不要循环嵌套赋值。
7.在可以用PHP内部字符串操作函数的情况下,不要用正则表达式。
8.foreach效率更高,尽量用foreach代替while和for循环。
9.用单引号替代双引号引用字符串。
10.“用i+=1代替i=i+1。符合c/c++的习惯,效率还高”。
11.对global变量,应该用完就unset()掉。
Part2
静态调用的成
这是一段显示日历的PHP代码,看到SaBlog源码里的日历函数,其中有个注释,非常搞笑,“这个日历搞的老子头痛”,呵呵,很有意思,所以激起了我的斗志,也来写一段日历函数
在线演示:http://newmc.com.cn/code/cal.php
PHP代码
<style>
a{text-decoration:none;color:#FFFFFF;}
*{font-family:verdana;font-size:11px;}
td{text-align:center;margin:3px;padding:3px;color:#669900;}
th{font-size:11px;margin:3px;padding:3px;color:#FFFFFF;background-color:#339900;}
.today{background-color:#339900;color:#ffffff;}
</style>
<title>日历</tit
GZIP(GNU-ZIP)是一种压缩技术。经过GZIP压缩后页面大小可以变为原来的30%甚至更小。这样用户浏览的时候就会感觉很爽很愉快!
要实现GZIP压缩页面需要浏览器和服务器共同支持,实际上就是服务器压缩,传到浏览器后浏览器解压并解析。浏览器那边不需要我们担心,因为现在绝大多数浏览器都支持解析GZIP过的页面。我们只要把页面在服务器端压缩再输出到浏览器就行了。
有点罗嗦,下面说正事:
正如要制作压缩饼干,先要拿到原料,要压缩一个页面,首先要获得要输出的内容。PHP中的ob_start()(ob => output buffer)函数可以实现这个功能,它可以把程序里准备输出的内容先放到一个叫做“缓冲区”的地方,当然,你可以理解为制作压缩饼干的暂时放原料的工作台。
这个函数一定要在页面输出之前使用,所以一般把它放在代码的最顶端。因为它就像是一个工作台,所以你要在原料到来之前就要准备好它,否则原料来了没地方放,会出问题的。用ob_start()得到要压缩的页面之后,我们就可以制作压缩饼干了,不对,应该是可以压缩页面了!不过好像还缺少一台压缩机,EZ,我们用PHP带的zlib扩展做一台:
PHP代码
function ob_gzip($content) // $content&
1>首页需要放缩略图,大小最大可以设定为580*580
2>评论部分有改进,用户体验应该很不错
3>据说GOOGLE,baidu就爱"http://host/tag/**/"这样的链接,所以把TAG相关的连接修改为"http://host/tag/**/"的形式.
需要改动三个部分:
1.模板
2.index.php,global.php,include/common.php,对主程序这三个文件的修改不会影响以后其他模板的使用,只是在include/common.php中添加了一个函数.目的是得到链接的真正地址
----------------------
function preroot(){
$str=$_SERVER['SCRIPT_URL'];
$str=substr($str,strlen($prefix));
$str=explode("/",$str);
$nums=count($str)-2;
for($i=0;$i<$nums;$i++)
{
$root.="../";
}
return $root;
}
----------------------
3..hdaccess文件
在原来的基础上加上这两条
--
学习使用jQuery有一段时间了,在蓝色听他们讨论ajax库,硬是没对哪些相对大牌些的Dojo,Prototype感兴趣,可以说对jQuery是一见钟情的喜欢,很喜欢这种感觉.喜欢它的名字,喜欢它的风格.
没有使用过其他的库,无法做出比较,虽不一定比其他的库功能强大,但是一般的应用是不在话下的
今天用jQuery做了个像样点的小东西,一个菜单
效果见这里http://work.lineks.cn/jquerymenu
这里分享一些,我搜集的资料吧.
[attach=41]
如何存储IP地址达到最优化
用ip2long()和long2ip()函数来存储和转换IP,这种方法把IP化为长整形,存储空间降到了接近四分之一,char(15) 的15个字节对整形的4个字节,转换方法为:2130706433=16777216*127+65536*0+256*0+1*1(假设ip为:127.0.0.1),这样判断IP是否在某一区段要简单多了
尽量使用三元运算符
三元运算符既简洁可读性也很好
PHP代码
$marks=1000;
echo $marks>9999?'黄金会员':($marks>4999?'白银会员':($marks>2999?'高级会员':($marks>1999?'中级会员':$marks>999?'初级会员':'新手上路')));
if($marks>9999)
{
echo '黄金会员';
}elseif($marks>4999){
echo '白银会员';
jQuery的选择器可谓异常强大,没有什么DOM里的任何数据能逃出它的掌心,这点是我非常喜欢的,
以前获取NODE要用getElementById,getElementsByTag,非常繁琐,用jQuery,很简单的代码就能实现
下面是对jQuery的选择器使用的总结,不妥之处,敬请斧正.
我把jQuery的选择器选择的方式分5类:
1.DOM方式
$('#id1')
//返回id为id1的TAG,类型:jQuery对象,以下省略
$('#id1 p')
$('#id1>p')
//返回id为id1的TAG下所有的p
能区别 $('#id1 #id2 #id3') 和 $('#id1,#id2,#id3') 的区别吗?
$('#id1,#id2,#id3')
//返回id为#id1下的#id2下的#id3的TAG
$('#id1,#id2,#id3')
//返回id为id1,id2,id3的TAG的群组
2.CSS方式
$('.style')
//返回样式为style的TAG
$('div.sty
以前特别喜欢玩文曲星上面的猜数字游戏,这次做了个可用于WEB上猜数字一来,想玩这个游戏的时候有的玩,二来,自己找点'项目'练练手,把PHP,JS,AJAX,JSON,MYSQL都用上了,能够记录成绩,大家来比试比试把地址:http://work.lineks.cn/guessnum
有人需要,那就分享下吧
[attach=76]
貌似ZF中没有记录程序执行时间的类,那只有自己来动手了,入口文件index.php和表现层的phtml的变量是不能直接传递的,我这里使用Zend_Registry
结构图
[attach=77]
index.php
例子代码已附上
用框架开发是有利有弊啊,虽然缩短了开发时间,却带来了执行效率的问题,这基本没有什么其他的程序,都用了0.7s,用框架,要想执行时间少于1s是不可能的一件事了。
如果看过jQuery Pack版的源文件,一定见过如下令人费解的Javascript代码
在线压缩体验:http://work.lineks.cn/jspack/
Javascrip.Packer.php下载[attach=80]
前些天用Fleaphp的小发现.纳闷,Fleaphp的URL_REWRITE和URL_PATHINFO模式怎么无效,于是发挥刻苦钻研的精神,总算找到问题所在了.三元操作符太长了容易晕,最好每段都用括号括起来line 32 at FLEAFilterUri.php
这样就OK了BUG已由老大提交SVN了,嘿嘿..
Mysql没有怎么系统的去学.也是根据需要不断补充的.最近,mysql的事务,回滚时而进入视线,到图书馆找Mysql资料.看到了这么一个SQL语句这样一句sql就解决问题了.哎,真是书到用时方恨少啊.平时有空还是多看看书好,这样可以少走好多弯路.