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;
}
Related videos on Youtube
Author by
Andrei
Updated on June 04, 2022Comments
-
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?
-
caw over 7 yearsYou might find
s($str)->truncate($length)
ands($str)->truncateSafely($length)
helpful, as found in this standalone library. Both versions are Unicode-safe. The latter does not break words.
-
-
Tudor Constantin over 12 years@deceze - you are right, thx for pointing that out - i corrected the copy/pasted code
-
Á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 over 5 years@ÁlvaroGonzález Correct! I'm removing my comment. Thanks!