phpstringellipsistruncation

Truncate a string to first n characters of a string and add three dots if any characters are removed


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?


Solution

  • //The simple version for 10 Characters from the beginning of the string
    $string = substr($string,0,10).'...';
    

    Update:

    Based on suggestion for checking length (and also ensuring similar lengths on trimmed and untrimmed strings):

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

    So you will get a string of max 13 characters; either 13 (or less) normal characters or 10 characters followed by '...'

    Update 2:

    Or as function:

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

    Update 3:

    It's been a while since I wrote this answer and I don't actually use this code any more. I prefer this function which prevents breaking the string in the middle of a word using the wordwrap function:

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