截取中文字串函数function cn_substr($str,$len, $start=0)
{
        $restr="";
        $c="";
        $str_len=strlen($str);
        if($str_len<$start+1) //如果字符串长度小于等于要截取的开始位置的长度
        {
                return "";
        }
        if($str_len<$start+$len||$len==0)
        {
                $len=$str_len-$start;
        }
        $end=$start+$len-1;
        for($i=0;$i<$str_len;$i++)
        {
                if(ord($str[$i])>0x80)//判断是否为汉字
                {
                        if($str_len>$i+1)
                        {
                                $c=$str[$i].$str[$i+1];
                        }
                        $i++;
                }
                else
                {
                        $c=$str[$i];
                }
                if($i>$end) //如果超过要截取的字符则推出
                {
                        if((strlen($restr)+strlen($c))>$len)
                        {
                                break;
                        }else
                        {
                                $restr.=$c;
                                break;
                        }
                }
                //截取
                if($start==0 || $i>$start)
                {
                        $restr.=$c;
                }
        }        if(strlen($restr) < strlen($str)) $restr .= "<i>...</i>";
        return $restr;
}

解决方案 »

  1.   

    你想说什么?function cutstr($str, $width, $dot = '...', $charset='') {
    if ($charset == '') {
    global $charset;
    empty($charset) && $charset = 'utf8';
    }
    $charjump = $charset == 'utf8' ? 2 : 1;
    $slen = strlen($str);
    $strwidth = 0;
    for ($i=0; $i<$slen; $i++) {
    if (ord($str[$i]) > 128) {
    $strwidth += 2;
    $i += $charjump;
    if ($strwidth >= $width) {
    break;
    }
    continue;
    } else {
    $strwidth += 1;
    if ($strwidth >= $width) {
    break;
    }
    }
    }
    return substr($str, 0, ++$i).$dot;
    }
      

  2.   

    什么意思,截取中文字符串?用 mb_substr 函数呀原型:string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )例如:mb_substr('你好啊xinshou_2008',0,3,'UTF-8');
    后面那个 encoding 你的页面是什么编码就写什么编码。
      

  3.   

    很遗憾,mb_substr 并不能保证显示宽度
    毕竟是在做网页啊
      

  4.   

    echo mb_substr('你好啊xinshou_2008',0,3,'UTF-8') . '...';
    echo mb_substr('xinshou_2008',0,3,'UTF-8'). '...';你好啊...
    xin...在网页中要多难看,就有多难看
      

  5.   

    GBK  utf-8 截取的代码不一样啊~!