在php编程中截取字符中时,可以利用php内置方法mb_substr截取中文,确何不出现乱码问题。
1、GBK编码字符串截取
 
2、utf-8编码字符串截取
 
中英混合也完全没有问题。
注意:
1、php文件的编码与网页显示时的编码。
2、使用mb_substr方法要知晓字符串的编码,否则需要判断,mbstring库还提供了mb_check_encoding来检验字符串编码,但还不完善。
第二,php截取中文字符串问题的解决方法。
以下代码试用于GB2312编码,截取中文字符串是PHP中一个头疼的问题,解决方法是根据值是否大于等于128来判断是否是双字节字符,以避免出现乱码的情况。
但中英文混合、特殊符号等问题总是存在的情况。
程序说明: 
1、len 参数以中文字符为标准,1len等于2个英文字符,为了形式上好看些 
2、如果将magic参数设为false,则中文和英文同等看待,取绝对的字符数 
3、特别适用于用htmlspecialchars()进行过编码的字符串 
4能正确处理GB2312中实体字符模式(??)
代码:  
 
function FSubstr($title,$start,$len="",$magic=true)  
{ 
$length = 0; 
if($len == "") $len = strlen($title); 
// www.jb200.com
//判断起始为不正确位置 
if($start > 0) 
{ 
  $cnum = 0; 
  for($i=0;$i<$start;$i++) 
  { 
   if(ord(substr($title,$i,1)) >= 128) $cnum ++; 
  } 
  if($cnum%2 != 0) $start--;
  unset($cnum); 
}
if(strlen($title)<=$len) return substr($title,$start,$len);
$alen   = 0; 
$blen = 0;
$realnum = 0;
for($i=$start;$i<strlen($title);$i++) 
{ 
  $ctype = 0; 
  $cstep = 0; 
  $cur = substr($title,$i,1); 
  if($cur == "&") 
  { 
   if(substr($title,$i,4) == "<") 
   { 
    $cstep = 4; 
    $length += 4; 
    $i += 3; 
    $realnum ++; 
    if($magic) 
    { 
     $alen ++; 
    } 
   } 
   else if(substr($title,$i,4) == ">") 
   { 
    $cstep = 4; 
    $length += 4; 
    $i += 3; 
    $realnum ++; 
    if($magic) 
    { 
     $alen ++; 
    } 
   } 
   else if(substr($title,$i,5) == "&") 
   { 
    $cstep = 5; 
    $length += 5; 
    $i += 4; 
    $realnum ++; 
    if($magic) 
    { 
     $alen ++; 
    } 
   } 
   else if(substr($title,$i,6) == """) 
   { 
    $cstep = 6; 
    $length += 6; 
    $i += 5; 
    $realnum ++; 
    if($magic) 
    { 
     $alen ++; 
    } 
   } 
   else if(substr($title,$i,6) == "'") 
   { 
    $cstep = 6; 
    $length += 6; 
    $i += 5; 
    $realnum ++; 
    if($magic) 
    { 
     $alen ++; 
    } 
   } 
   else if(preg_match("/&#(d+);/i",substr($title,$i,8),$match)) 
   { 
    $cstep = strlen($match[0]); 
    $length += strlen($match[0]); 
    $i += strlen($match[0])-1; 
    $realnum ++; 
    if($magic) 
    { 
     $blen ++; 
     $ctype = 1; 
    } 
   } 
  }else{ 
   if(ord($cur)>=128) 
   { 
    $cstep = 2; 
    $length += 2; 
    $i += 1; 
    $realnum ++; 
    if($magic) 
    { 
     $blen ++; 
     $ctype = 1; 
    } 
   }else{ 
    $cstep = 1; 
    $length +=1; 
    $realnum ++; 
    if($magic) 
    { 
     $alen++; 
    } 
   } 
  }
  if($magic) 
  { 
   if(($blen*2+$alen) == ($len*2)) break; 
   if(($blen*2+$alen) == ($len*2+1)) 
   { 
    if($ctype == 1) 
    { 
     $length -= $cstep; 
     break; 
    }else{ 
     break; 
    } 
   } 
  }else{ 
   if($realnum == $len) break; 
  } 
}
unset($cur); 
unset($alen); 
unset($blen); 
unset($realnum); 
unset($ctype); 
unset($cstep);
return substr($title,$start,$length); 
}
附,php中文字符串截取函数。
代码: