初学PHP,Substr库函数居然会把汉字算成两个,难怪有些PHP写的程序标题从来不会自动截短,呵呵。下面我写的这个程序不算完美,但处理一般的中文(GB18030,GB2312,BIG5)是没有问题的。这个函数不适合utf-8编码的文字。
//$str字符串 //$max 最大字符数
function Substring($str,$max){ $cnt=0; //实际计数 $index=0; //当前索引 $output=''; //输出 // while($cnt<$max && $index<strlen($str)){ $output.=$str[$index]; //big5 if(ord($str[$index])>=0x81 && ord($str[$index])<=0xfe){ if($index+1<strlen($str)){ if( (ord($str[$index+1])>=0x40 && ord($str[$index+1])<0x7e) || (ord($str[$index+1])>=0xa1 && ord($str[$index+1])<=0xfe) ){ $index++; $output.=$str[$index]; } } } //gb2312 else if(ord($str[$index])>=0xa1 && ord($str[$index])<=0xf7){ $output.=$str[$index]; if($index+1<strlen($str)){ if(ord($str[$index+1])>=0xa1 && ord($str[$index+1])<0xfe){ $index++; $output.=$str[$index]; } } } else{
} $cnt++; $index++; } return $output; } 
|