[php]如何在PHP中截取中文字串无乱码

用什么方法能写出来啊这个题有点难啊

一年前写的一个函数。用法与substr一样,支持中文。您也可以加以改进。
//截取字符串含数,对系统函数的改进,不会将中文变乱。
function mysubstr ($str,$start,$len=0,$cutchar="…") {
$str=str_replace(" ",' ',$str);
$str=str_replace("“",'“',$str);
$str=str_replace("”",'”',$str);
$str=str_replace("—",'—',$str);
$str=str_replace(""",'"',$str);
$str=str_replace(''',"'",$str);
$str=str_replace("<",'<',$str);
$str=str_replace(">",'>',$str);
$str=str_replace("&",'&',$str);
$str=preg_replace("/[\s]+/"," ",$str);
$tolen=strlen($str);
if(!($start==0 && $len>=$tolen)){
//为方便操作,先将起始值和长度值转换为正数
if($start<0)$start=$tolen+$start;if($start<0)$start=0;if($start>$tolen)return "";
if($len<=0)$len=($tolen+$len)-$start;if($len<1)return "";
if($len>$tolen)$len=$tolen;
for($i=0;$i<$start;$i++){
if(ord(substr($str,$i,1))>127){$i++;}
}
$start=$i; //起始位置计算完成
for($k=0;$k<$len;$k++,$i++){
if(ord(substr($str,$i,1))>127){$i++;$k++;}
}
$len=$k; //长度计算完成
$str=substr($str,$start,$len);
if($start>0){$str=$cutchar.$str;}
if($start+$len<$tolen){$str.=$cutchar;}
}
$str=str_replace("&",'&',$str);
$str=str_replace('"','"',$str);
$str=str_replace("'",''',$str);
$str=str_replace("<",'<',$str);
$str=str_replace(">",'>',$str);
return $str;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-02-20
只要截取的个数是双数就行了 中文是2个字节等于一个汉字长
第2个回答  2010-02-20
按照编码截取
$str = "心";
echo mb_substr($str,0,3,"UTF-8");追问

$str,0,3,"UTF-8"); 这里面是什么意思,分别是

相似回答