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


当前回答

Substr()是最好的,你还需要先检查字符串的长度

$str = 'someLongString';
$max = 7;

if(strlen($str) > $max) {
   $str = substr($str, 0, $max) . '...';
}

Wordwrap不会修剪字符串,只是分割它…

其他回答

我为此开发了一个函数

 function str_short($string,$limit)
        {
            $len=strlen($string);
            if($len>$limit)
            {
             $to_sub=$len-$limit;
             $crop_temp=substr($string,0,-$to_sub);
             return $crop_len=$crop_temp."...";
            }
            else
            {
                return $string;
            }
        }

你只需要调用带有string和limit的函数 例如:str_short(“hahahahahah”,5); 它会剪掉你的绳子,并在最后加上“…” :)

$width = 10;

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

或者使用wordwrap

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

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

    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(上面的省略号)包含在截断的长度中。

//The simple version for 10 Characters from the beginning of the string
$string = substr($string,0,10).'...';

更新:

基于检查长度的建议(也确保修剪和未修剪的字符串长度相似):

$string = (strlen($string) > 13) ? substr($string,0,10).'...' : $string;

所以你会得到一个最多13个字符的字符串;13个(或更少)普通字符或10个字符后跟“…”

更新2:

或作为函数:

function truncate($string, $length, $dots = "...") {
    return (strlen($string) > $length) ? substr($string, 0, $length - strlen($dots)) . $dots : $string;
}

更新3:

我写这个答案已经有一段时间了,实际上我不再使用这段代码了。我更喜欢这个函数,它可以防止使用wordwrap函数打断单词中间的字符串:

function truncate($string,$length=100,$append="&hellip;") {
  $string = trim($string);

  if(strlen($string) > $length) {
    $string = wordwrap($string, $length);
    $string = explode("\n", $string, 2);
    $string = $string[0] . $append;
  }

  return $string;
}