获取字符串的前n个字符

Ale*_*lex 305 php string

如何在PHP中获取字符串的前n个字符?将字符串剪裁为特定字符数的最快方法是什么,如果需要,可以附加"..."?

Bre*_*len 561

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

更新:

基于检查长度的建议(并确保修剪和未修剪的弦上的类似长度):

$string = (strlen($string) > 13) ? substr($string,0,10).'...' : $string;
Run Code Online (Sandbox Code Playgroud)

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

更新2:

或作为功能:

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

更新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;
}
Run Code Online (Sandbox Code Playgroud)

  • "hellip" - 花了我一段时间才明白我们不是在谈论撒旦的ip地址 (26认同)
  • 可能最好用省略号(...)而不是3点(...)替换 (11认同)
  • 我喜欢这个,但我更改了它并使用以下内容删除了最后的空格:$ string = substr(trim($ string),0,10).'...'; 这样你得到的东西就像"我喜欢......"而不是"我喜欢......". (3认同)
  • 更新3是最有帮助的. (2认同)

bru*_*ski 107

自4.0.6版以来,此功能已内置于PHP中.查看文档.

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

// outputs Hello W...
Run Code Online (Sandbox Code Playgroud)

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

  • 为我工作完美.最佳答案没有用,我很高兴它没有因为保持滚动并找到了这个宝石. (4认同)
  • 警告:mb_strimwidth() 需要安装并激活多字节字符串扩展,但情况并非总是如此,因此请在部署之前进行测试。 (3认同)
  • 十分感谢!这应该是最好的答案! (2认同)
  • 接得好!很多有经验的PHP开发人员都不知道这个函数:) (2认同)

Emi*_*röm 15

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

$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) . '...';
}
Run Code Online (Sandbox Code Playgroud)


Mor*_*ews 9

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

例如:我们需要将"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;
    }

}
Run Code Online (Sandbox Code Playgroud)


Mat*_*hew 8

codeigniter框架包含一个帮助器,称为"文本助手".以下是适用于codeigniter的用户指南的一些文档:http: //codeigniter.com/user_guide/helpers/text_helper.html(只需阅读word_limiter和character_limiter部分).以下是与您的问题相关的两个函数:

if ( ! function_exists('word_limiter'))
{
    function word_limiter($str, $limit = 100, $end_char = '&#8230;')
    {
        if (trim($str) == '')
        {
            return $str;
        }

        preg_match('/^\s*+(?:\S++\s*+){1,'.(int) $limit.'}/', $str, $matches);

        if (strlen($str) == strlen($matches[0]))
        {
            $end_char = '';
        }

        return rtrim($matches[0]).$end_char;
    }
}
Run Code Online (Sandbox Code Playgroud)

if ( ! function_exists('character_limiter'))
{
    function character_limiter($str, $n = 500, $end_char = '&#8230;')
    {
        if (strlen($str) < $n)
        {
            return $str;
        }

        $str = preg_replace("/\s+/", ' ', str_replace(array("\r\n", "\r", "\n"), ' ', $str));

        if (strlen($str) <= $n)
        {
            return $str;
        }

        $out = "";
        foreach (explode(' ', trim($str)) as $val)
        {
            $out .= $val.' ';

            if (strlen($out) >= $n)
            {
                $out = trim($out);
                return (strlen($out) == strlen($str)) ? $out : $out.$end_char;
            }       
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Tec*_*ist 8

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

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;
}
Run Code Online (Sandbox Code Playgroud)

如果$ str比$ n_chars短,则返回它不变.

如果$ str等于$ n_chars,则返回原样.

如果$ str超过$ n_chars那么它会查找下一个要剪切的空间或者(如果没有更多的空格直到结束)$ str会被粗略地削减而不是$ n_chars.

注意:请注意,如果是HTML,此方法将删除所有标记.


小智 5

if(strlen($text) > 10)
     $text = substr($text,0,10) . "...";
Run Code Online (Sandbox Code Playgroud)