哪位有好用的PHP截取字符串的函数,汉字、英文、数字、标点混合时不会出错的。
substr截取时有时会出乱码之类的,不太理想。

解决方案 »

  1.   

    mb_string 扩展手动打开的话怎么打开?
      

  2.   

    $s = '哪位有好用的PHP截取字符串的函数,汉字、英文、数字、标点混合时不会出错的。';echo iconv_substr($s, 13, 7, 'gbk');
      

  3.   

    是的,截取的时候有时候就会出现乱码,我一般用这个//截取中文字符串
    function mysubstr($str, $start, $len) 
    {
    $tmpstr = "";
    $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.   

    string mb_substr ( string $str, int $start [, int $length [, string $encoding]] )
    Performs a multi-byte safe substr() operation based on number of characters.
      

  5.   


    echo phpinfo();看php.ini的路径, 找到mb_string相关扩展把前面的分号去掉
      

  6.   

    //$title=cut_str($row['title'], 18, $start = 0,'UTF-8');
    function cut_str($string, $sublen, $start = 0, $code = 'UTF-8') { 
       if(strlen($string)<=$sublen*2){ return $string;}
       if($code == 'UTF-8'){ 
           $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/"; 
           preg_match_all($pa, $string, $t_string);        if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."..."; 
           return join('', array_slice($t_string[0], $start, $sublen)); 
       } else  { 
           $start = $start*2; 
           $sublen = $sublen*2; 
           $strlen = strlen($string); 
           $tmpstr = '';        for($i=0; $i<$strlen; $i++){ 
               if($i>=$start && $i<($start+$sublen)) { 
                   if(ord(substr($string, $i, 1))>129) { 
                       $tmpstr.= substr($string, $i, 2); 
                   } 
                   else{ 
                       $tmpstr.= substr($string, $i, 1); 
                   } 
               } 
               if(ord(substr($string, $i, 1))>129) $i++; 
           } 
           if(strlen($tmpstr)<$strlen ) $tmpstr.= "..."; 
           return $tmpstr; 
       } 
    }