How to truncate an UTF8 string in PHP?

11,141

Solution 1

Everything you need is mb_strimwidth() : http://php.net/manual/en/function.mb-strimwidth.php

Example:

mb_strimwidth('Hi, I would like to tell you how wonderful this is.',0,15,'...','utf-8');

Solution 2

try with mb_substr() :

static function short($string, $max = 255){
   if(mb_strlen($string, 'utf-8') >= $max){
       $string = mb_substr($string, 0, $max - 5, 'utf-8').'...';
   } return $string;
}
Share:
11,141

Related videos on Youtube

Andrei
Author by

Andrei

Updated on June 04, 2022

Comments

  • Andrei
    Andrei almost 2 years

    I have some strings in my PHP code that need to be truncated if they are too long.

    For example if a text is something like this:

    Hi, I would like to tell you how wonderful this is.

    It would replace it with this:

    Hi, I would like to ...

    For that I've done a simple substr. The problem is that in UTF8 some characters are actually two characters long. And I've had some problems with a character being cut in the middle: For example, when I try to insert the modified string in the database, it crashes.

    Here is my current function:

    static function short($string, $max = 255){
       if(strlen($string) >= $max){
           $string = substr($string, 0, $max - 5).'...';
       } return $string;
    }
    

    Would someone know a way to make this function work even for UTF8 characters?

  • Tudor Constantin
    Tudor Constantin over 12 years
    @deceze - you are right, thx for pointing that out - i corrected the copy/pasted code
  • Álvaro González
    Álvaro González over 5 years
    @trejder No, it isn't. The initial version of this article was claiming that mb_strimwidth() is deprecated in PHP 7.2 and that this deprecation was a source of described problem. It turned out that mb_strimwidth() is (of course!) not deprecated in PHP 7.2.
  • trejder
    trejder over 5 years
    @ÁlvaroGonzález Correct! I'm removing my comment. Thanks!