初学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;
}