我改写的strlen和substr函数,支持汉字,看了后应该可以解决你的问题
注意这句:if(ord(substr($str,$cur,1))>127) //是汉字
//取字符串的自串,匹配汉字,当长度不指定或小于零时将从指定的开始点到末尾;
//开始值如果为负值,则从右开始数
function strlen1($str)
{
$count=0; //字符个数;
$strlen=strlen($str); //字符串的字节长度;
$cur=0; //读取的当前位置; while($cur<$strlen)
{
if(ord(substr($str,$cur,1))>127) //是汉字
{
$count++;
$cur=$cur+2;
}
else //非汉字
{
$count++;
$cur++;
}
} return $count;
} function substr1($str,$start,$length=0)
{
$strarr=array(); //临时存储字符串把字符串读入该数组中,区分出汉字;
$count=0; //数组个数;
$strlen=strlen($str); //字符串的字节长度;
$cur=0; //读取的当前位置;
$begin=0; //取字符串的开始位置;
$end=0; //取字符串的结束位置;
$rarr=array(); //存放返回字符数组;
$rstr=""; //存放返回字符串; while($cur<$strlen)
{
if(ord(substr($str,$cur,1))>127) //是汉字
{
$strarr[$count++]=substr($str,$cur,2);
$cur=$cur+2;
}
else //非汉字
{
$strarr[$count++]=substr($str,$cur++,1);
}
} //得到开始值; if($start<0)
{
$begin=$count+$start;
}
else
{
$begin=$start;
} //检验$begin的合法性,超过限制取0值
if($begin<0)
$begin=0; //得到结束值;
if($length==0)
$end=$count-1;
else
{
if($length>0)
$end=$begin+$length-1;
elseif($length<0)
$end=$count+$length-1;
} //检验$end的合法性,超过限制取最末尾字符;
if($end>=$count)
$end=$count-1; $tmp=0;
for($i=$begin;$i<=$end;$i++)
{
$rarr[$tmp++]=$strarr[$i];
} if($begin<=$end)
{
$rstr=implode("",$rarr);
} return $rstr; }
注意这句:if(ord(substr($str,$cur,1))>127) //是汉字
//取字符串的自串,匹配汉字,当长度不指定或小于零时将从指定的开始点到末尾;
//开始值如果为负值,则从右开始数
function strlen1($str)
{
$count=0; //字符个数;
$strlen=strlen($str); //字符串的字节长度;
$cur=0; //读取的当前位置; while($cur<$strlen)
{
if(ord(substr($str,$cur,1))>127) //是汉字
{
$count++;
$cur=$cur+2;
}
else //非汉字
{
$count++;
$cur++;
}
} return $count;
} function substr1($str,$start,$length=0)
{
$strarr=array(); //临时存储字符串把字符串读入该数组中,区分出汉字;
$count=0; //数组个数;
$strlen=strlen($str); //字符串的字节长度;
$cur=0; //读取的当前位置;
$begin=0; //取字符串的开始位置;
$end=0; //取字符串的结束位置;
$rarr=array(); //存放返回字符数组;
$rstr=""; //存放返回字符串; while($cur<$strlen)
{
if(ord(substr($str,$cur,1))>127) //是汉字
{
$strarr[$count++]=substr($str,$cur,2);
$cur=$cur+2;
}
else //非汉字
{
$strarr[$count++]=substr($str,$cur++,1);
}
} //得到开始值; if($start<0)
{
$begin=$count+$start;
}
else
{
$begin=$start;
} //检验$begin的合法性,超过限制取0值
if($begin<0)
$begin=0; //得到结束值;
if($length==0)
$end=$count-1;
else
{
if($length>0)
$end=$begin+$length-1;
elseif($length<0)
$end=$count+$length-1;
} //检验$end的合法性,超过限制取最末尾字符;
if($end>=$count)
$end=$count-1; $tmp=0;
for($i=$begin;$i<=$end;$i++)
{
$rarr[$tmp++]=$strarr[$i];
} if($begin<=$end)
{
$rstr=implode("",$rarr);
} return $rstr; }
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货