如何在PHP中获得字符串的前n个字符?什么是最快的方法来修剪一个字符串到特定的字符数,并添加'…如果需要的话?


当前回答

这个函数可以在中间不中断单词的情况下完成工作

    function str_trim($str,$char_no){
        if(strlen($str)<=$char_no)
            return $str;
        else{
            $all_words=explode(" ",$str);
            $out_str='';
            foreach ($all_words as $word) {
                $temp_str=($out_str=='')?$word:$out_str.' '.$word;
                if(strlen($temp_str)>$char_no-3)//-3 for 3 dots
                    return $out_str."...";
                $out_str=$temp_str;
            }
        }
    }

其他回答

$width = 10;

$a = preg_replace ("~^(.{{$width}})(.+)~", '\\1…', $a);

或者使用wordwrap

$a = preg_replace ("~^(.{1,${width}}\b)(.+)~", '\\1…', $a);

最好像这样抽象你的代码(注意限制是可选的,默认为10):

print limit($string);


function limit($var, $limit=10)
{
    if ( strlen($var) > $limit )
    {
        return substr($string, 0, $limit) . '...';
    }
    else
    {
        return $var;
    }
}

这个函数可以在中间不中断单词的情况下完成工作

    function str_trim($str,$char_no){
        if(strlen($str)<=$char_no)
            return $str;
        else{
            $all_words=explode(" ",$str);
            $out_str='';
            foreach ($all_words as $word) {
                $temp_str=($out_str=='')?$word:$out_str.' '.$word;
                if(strlen($temp_str)>$char_no-3)//-3 for 3 dots
                    return $out_str."...";
                $out_str=$temp_str;
            }
        }
    }

从4.0.6版开始,PHP就内置了这个功能。去看医生。

echo mb_strimwidth('Hello World', 0, 10, '...');

// outputs Hello W...

注意trimmarker(上面的省略号)包含在截断的长度中。

if(strlen($text) > 10)
     $text = substr($text,0,10) . "...";