如何在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;
            }
        }
    }

其他回答

//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;
}

如果需要控制字符串字符集,多字节扩展可以派上用场。

$charset = 'UTF-8';
$length = 10;
$string = 'Hai to yoo! I like yoo soo!';
if(mb_strlen($string, $charset) > $length) {
  $string = mb_substr($string, 0, $length - 3, $charset) . '...';
}
if(strlen($text) > 10)
     $text = substr($text,0,10) . "...";

我为此开发了一个函数

 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); 它会剪掉你的绳子,并在最后加上“…” :)

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

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

// outputs Hello W...

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