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


当前回答

//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="…") {
  $string = trim($string);

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

  return $string;
}

其他回答

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

我不确定这是否是最快的解决方案,但它看起来是最短的:

$result = current(explode("\n", wordwrap($str, $width, "...\n")));

附注:见一些例子在这里https://stackoverflow.com/a/17852480/131337

//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="…") {
  $string = trim($string);

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

  return $string;
}

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

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

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

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

如果你想要切割,小心不要分割单词,你可以做下面的事情

function ellipse($str,$n_chars,$crop_str=' [...]')
{
    $buff=strip_tags($str);
    if(strlen($buff) > $n_chars)
    {
        $cut_index=strpos($buff,' ',$n_chars);
        $buff=substr($buff,0,($cut_index===false? $n_chars: $cut_index+1)).$crop_str;
    }
    return $buff;
}

如果$str比$n_chars短,则原形返回。

如果$str等于$n_chars也会返回它。

如果$str比$n_chars长,那么它会寻找下一个空格来切割,或者(如果直到最后没有更多的空格)$str会在$n_chars被粗鲁地切割。

注意:注意此方法将删除HTML中的所有标记。