PHPCon Poland 2024


(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)

mb_strimwidthTronque une chaîne


    string $string,
    int $start,
    int $width,
    string $trim_marker = "",
    ?string $encoding = null
): string

Tronque la chaîne string à la longueur width spécifié, où les caractères à demi-chasse comptent en tant que 1, et les caractères à pleine chasse comptent en tant que 2. Voir » pour plus de détails concernant les chasses des caractères Asiatique de l'Est.

Liste de paramètres


La chaîne à tronquer.


start est la position de départ, en nombre de caractères depuis le début de la chaîne (premier caractère est 0), ou si la position est négative, nombre de caractères à partir de la fin de la chaîne de caractères.


La largeur de la troncation souhaitée. Si une largeur négative est spécifiée, il faut compter à partir de la fin de la chaîne.


Fournir une largeur négative est obsolète à partir de PHP 8.3.0.


trim_marker est la chaîne ajoutée à la fin de la chaîne tronquée.


Le paramètre encoding est l'encodage des caractères. S'il est omis ou null, l'encodage de caractères interne sera utilisé.

Valeurs de retour

La chaîne tronquée. Si trim_marker est définit, trim_marker remplace les derniers caractères pour correspondre à la taille width.


Version Description
8.3.0 Fournir une width négative à mb_strimwidth() est désormais obsolète.
8.0.0 encoding est désormais nullable.
7.1.0 Support pour starts et widths négatifs a été ajouté.


Exemple #1 Exemple avec mb_strimwidth()

echo mb_strimwidth("Hello World", 0, 10, "...");
// Affiche : "Hello W..."

Voir aussi

add a note

User Contributed Notes 2 notes

dregad at NOSPAM-mantisbt dot org
1 year ago
I see a lot of usage in the field where people rely on this function to truncate a string to a given length and append some chars at the end following example #1 in the above documentation.

While this works just fine with Western alphabets, it should be noted that a string's width is NOT necessarily the same as its length.

In Chinese, Japanese and Korean, some characters can be represented as full or half width, which may lead to unexpected results...

= ['English' => 'Switzerland',
'Half width' => 'スイス',
'Full width' => 'スイス',
foreach (
$str as $w => $s) {
printf("%-10s: %s (bytes=%d chars=%d width=%d)\nSubstring : %s\nTrim width: %s\n\n",
$w, $s,
strlen($s), mb_strlen($s), mb_strwidth($s),
mb_substr($s, 0, 3),
mb_strimwidth($s, 0, 3)
/* Output
# With ASCII, chars == width, so everything works as expected
English : Switzerland (bytes=11 chars=11 width=11)
Substring : Swi
Trim width: Swi

# With half-width katakanas, it works too
Half width: スイス (bytes=9 chars=3 width=3)
Substring : スイス
Trim width: スイス

# Full-width katakanas are twice as wide, so we only get the 1st 'su' !
Full width: スイス (bytes=9 chars=3 width=6)
Substring : スイス
Trim width: ス
jamesgrimshaw2006 at gmail dot com
8 months ago
mb_strimwidth will only append "trim_marker" if the string is over the width.

*test code*
$HashTags = 'Results';
$socialmediatext = 'abcdefghijklmnopqrstuvwxyz';
for( $i=0; $i<=20; $i++ )
$socialmediatext .= '.';
$Twittext = mb_strimwidth($socialmediatext,0,35,$HashTags);
echo "<p>[".strlen($Twittext)."]$Twittext</p>";

To Top