一般来说,GB2312汉字的前后两个字节的ASCII值都不会小于 128,而英文字符正相反,只需要判断这个就可以了。不过,你不要想用这个办法判断其他大字库的汉字编码,比如说 GBK。

解决方案 »

  1.   

    用这个。接分ing...  :)$srt = substr($str,"0","20").chr(0);终于抢到一贴了,以前一朋友靠诉偶的。。
      

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

  3.   

    substr()函数中文版(终极完美版)  
    function msubstr($str,$start,$len)//字符位置从0开始  
    {  
    $strlen=$start+$len;  
    for($i=0;$i<$strlen;$i++)  
    {  
    if(ord(substr($str,$i,1))>0xa0)  
    {  
    $tmpstr.=substr($str,$i,2);  
    $i++;  
    }  
    else  $tmpstr.=substr($str,$i,1);  }  
    return $tmpstr;  }  
     
      

  4.   

    PHP中一个控制字符串输出的函数  
    // php 中 一个控制字符串输出的函数(中英文),每行显示多少字数,避免英文的影响 
    // $str 字符串 
    // $len 每行显示的字数(汉字×2) 
    function rep($str,$len) {   
        $strlen=strlen($str);   
        $i=0; 
        $finstr=""; 
        $pos=0; 
         
        while($i<$strlen)   
        {   
          $s1=substr($str,$i,1); 
          $s2=ord($s1); 
          if($s2>0xa0){ 
           
              $finstr.=substr($str,$i,2);  
              $pos+=2; 
              $i+=2; 
           
          }else{ 
               
              switch($s2){ 
                 case 13:  
                  $finstr.="<BR>"; 
                  $pos=0; 
                  break; 
                 case 10:                
                  $pos=0; 
                  break;              
                 case 32;              
                     $finstr.="&nbsp;"; 
                     $pos++; 
                     break; 
                 default:                       
                  $finstr.=htmlspecialchars($s1);  
                  $pos++;     
                  break; 
              }       
               
              $i++;  
               
           } //if 
         
        if($pos>=$len){     
              $finstr.="<BR>"; 
              $pos=0; 
        } 
        }  //while 
        return $finstr;   
    }   
     
      

  5.   

    这个问题问的人太多了!
    function substrex($str,$len)
    {  
       $str = (string)$str;  
       $len = (int)$len;     $strlen = strlen($str);  
       if($len>$strlen) $len = $strlen;     $i = 0;  
       $fixlen = 0;  
       while($i<$len){  
          $chr = $str[$i];  
          $i++;  
          if(ord($chr)<0x80) $fixlen++;  //128D
          elseif($i<$len){  
            $i++;  
            $fixlen += 2;  
          }  
       }  
       $cutstr = substr($str,0,$fixlen);
       if ($str <> $cutstr)
       {
           $cutstr .= '...';
       }
       return $cutstr;
    }