$newStr=mb_substr($str,0,$len,'utf-8');

解决方案 »

  1.   

    如果服务器不支持mbstring扩展,就用下面这个函数function subString_UTF8($str, $start, $lenth)
        {
            $len = strlen($str);
            $r = array();
            $n = 0;
            $m = 0;
            for($i = 0; $i < $len; $i++) {
                $x = substr($str, $i, 1);
                $a  = base_convert(ord($x), 10, 2);
                $a = substr('00000000'.$a, -8);
                if ($n < $start){
                    if (substr($a, 0, 1) == 0) {
                    }elseif (substr($a, 0, 3) == 110) {
                        $i += 1;
                    }elseif (substr($a, 0, 4) == 1110) {
                        $i += 2;
                    }
                    $n++;
                }else{
                    if (substr($a, 0, 1) == 0) {
                        $r[ ] = substr($str, $i, 1);
                    }elseif (substr($a, 0, 3) == 110) {
                        $r[ ] = substr($str, $i, 2);
                        $i += 1;
                    }elseif (substr($a, 0, 4) == 1110) {
                        $r[ ] = substr($str, $i, 3);
                        $i += 2;
                    }else{
                        $r[ ] = '';
                    }
                    if (++$m >= $lenth){
                        break;
                    }
                }
            }
            return $r;
        } // End subString_UTF8;
    }// End String返回的是个数组,显示的join一下:
    echo join('',subString_UTF8($str, $start, $lenth));