function get_str($str,$start,$len){
    for($i=0;$i<$start+$len;$i++){
        $tmpstr=(ord($str[$i])>=161 && ord($str[$i])<=247&& ord($str[$i+1])>=161 && ord($str[$i+1])<=254)?$str[$i].$str[++$i]:$tmpstr=$str[$i];
        if ($i>=$start&&$i<($start+$len))$tmp .=$tmpstr;
    }
    return $tmp;
}
使用这个函数,截取字符串,就不会出现乱码了
具体怎么应用这个函数,不用再说了吧^_^

解决方案 »

  1.   

    function c_substr($str,$start=0) {
      $ch = chr(127);
      $p = array("/[\x81-\xfe]([\x81-\xfe]|[\x40-\xfe])/","/[\x01-\x77]/");
      $r = array("","");
      if(func_num_args() > 2)
        $end = func_get_arg(2);
      else
        $end = strlen($str);
      if($start < 0)
        $start += $end;  if($start > 0) {
        $s = substr($str,0,$start);
        if($s[strlen($s)-1] > $ch) {
          $s = preg_replace($p,$r,$s);
        $start += strlen($s);
        }
      }
      $s = substr($str,$start,$end);
      $end = strlen($s);
      if($s[$end-1] > $ch) {
        $s = preg_replace($p,$r,$s);
        $end += strlen($s);
      }
      return substr($str,$start,$end);
    }
      

  2.   

    /* 函数 sub_str($text, $length)
    ** 功能 从文本中截取指定长度字符串,考虑了对中文的处理
    ** 参数 $text 要截取的文本
    ** 参数 $length 要截取的字符串长度
    */
    function sub_str($text, $length)
    {
    for ($i=0; $i<$length; $i++)
    {
    $chr = substr($text, $i, 1);
    if (ord($chr) > 0x80)//字符是中文
    {
    $length++;
    $i++;
    } }
    $str = substr($text, 0, $length); 
    return $str;
    }