PHP截取字符串前N个字符的几种方法

  时间:2017-07-28
本文章向大家介绍php截取字符串前N个字符的几种方法,N表示正整数,如:1,2,3,4,5,6,7,8,9,10等等,需要的朋友可以参考一下。

比如有一个字符串,我只显示字符串的前10个字符,其余字符用省略号代替。

第一种方法:使用substr方法

$string = substr($string,0,10).'...';

上面代码并不完善,因为它没有检查字符串长度,完善后的代码如下:

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

你会得到一个最多13个字符的字符串; 13个(或更少)普通字符或10个字符后跟'...'

将上面代码封装到函数里面:

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

上面函数仍然有漏洞,当截取被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;
}

 

第二种方法:

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

$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) . '...';
}

 

第三种方法:

有时候,你需要将字符串限制为最后一个完整的单词,即:你不希望最后一个单词被打破,而是用第二个单词停止。

例如:我们需要将“This is my String”限制为6个字符,而不是“This i ...”,我们希望它为“This ...”,即我们将在最后一个单词中跳过那些破碎的字母。

class Fun {

    public function limit_text($text, $len) {
        if (strlen($text) < $len) {
            return $text;
        }
        $text_words = explode(' ', $text);
        $out = null;


        foreach ($text_words as $word) {
            if ((strlen($word) > $len) && $out == null) {

                return substr($word, 0, $len) . "...";
            }
            if ((strlen($out) + strlen($word)) > $len) {
                return $out . "...";
            }
            $out.=" " . $word;
        }
        return $out;
    }

}

原文地址:http://www.manongjc.com/article/1986.html