Get first n characters of a string

前端 未结 19 1121
萌比男神i
萌比男神i 2020-11-22 13:06

How can I get the first n characters of a string in PHP? What\'s the fastest way to trim a string to a specific number of characters, and append \'...\' if needed?

相关标签:
19条回答
  • 2020-11-22 13:30

    If there is no hard requirement on the length of the truncated string, one can use this to truncate and prevent cutting the last word as well:

    $text = "Knowledge is a natural right of every human being of which no one
    has the right to deprive him or her under any pretext, except in a case where a
    person does something which deprives him or her of that right. It is mere
    stupidity to leave its benefits to certain individuals and teams who monopolize
    these while the masses provide the facilities and pay the expenses for the
    establishment of public sports.";
    
    // we don't want new lines in our preview
    $text_only_spaces = preg_replace('/\s+/', ' ', $text);
    
    // truncates the text
    $text_truncated = mb_substr($text_only_spaces, 0, mb_strpos($text_only_spaces, " ", 50));
    
    // prevents last word truncation
    $preview = trim(mb_substr($text_truncated, 0, mb_strrpos($text_truncated, " ")));
    

    In this case, $preview will be "Knowledge is a natural right of every human being".

    Live code example: http://sandbox.onlinephpfunctions.com/code/25484a8b687d1f5ad93f62082b6379662a6b4713

    0 讨论(0)
  • 2020-11-22 13:32
    if(strlen($text) > 10)
         $text = substr($text,0,10) . "...";
    
    0 讨论(0)
  • 2020-11-22 13:34

    this solution will not cut words, it will add three dots after the first space. I edited @Raccoon29 solution and I replaced all functions with mb_ functions so that this will work for all languages such as arabic

    function cut_string($str, $n_chars, $crop_str = '...') {
        $buff = strip_tags($str);
        if (mb_strlen($buff) > $n_chars) {
            $cut_index = mb_strpos($buff, ' ', $n_chars);
            $buff = mb_substr($buff, 0, ($cut_index === false ? $n_chars : $cut_index + 1), "UTF-8") . $crop_str;
        }
        return $buff;
    }
    
    0 讨论(0)
  • 2020-11-22 13:34
    $yourString = "bla blaaa bla blllla bla bla";
    $out = "";
    if(strlen($yourString) > 22) {
        while(strlen($yourString) > 22) {
            $pos = strrpos($yourString, " ");
            if($pos !== false && $pos <= 22) {
                $out = substr($yourString,0,$pos);
                break;
            } else {
                $yourString = substr($yourString,0,$pos);
                continue;
            }
        }
    } else {
        $out = $yourString;
    }
    echo "Output String: ".$out;
    
    0 讨论(0)
  • 2020-11-22 13:39

    The function I used:

    function cutAfter($string, $len = 30, $append = '...') {
            return (strlen($string) > $len) ? 
              substr($string, 0, $len - strlen($append)) . $append : 
              $string;
    }
    

    See it in action.

    0 讨论(0)
  • 2020-11-22 13:40

    The Multibyte extension can come in handy if you need control over the string charset.

    $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) . '...';
    }
    
    0 讨论(0)
提交回复
热议问题