PHP 8.5.0 Alpha 1 available for testing

mb_strimwidth

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

mb_strimwidthTrunca una cadena

Descripción

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

Trunca la cadena string a la longitud width especificada, donde los caracteres de media caja cuentan como 1, y los caracteres de caja completa cuentan como 2. Ver » http://www.unicode.org/reports/tr11/ para más detalles sobre las cajas de caracteres asiáticos del este.

Parámetros

string

La cadena a truncar.

start

start es la posición de inicio, en número de caracteres desde el principio de la cadena (el primer carácter es 0), o si la posición es negativa, número de caracteres desde el final de la chaîne de caractères.

width

La anchura de la truncación deseada. Si se especifica una anchura negativa, debe contarse desde el final de la cadena.

Nota:

Proporcionar una anchura negativa está obsoleto a partir de PHP 8.3.0.

trim_marker

trim_marker es la cadena añadida al final de la cadena truncada.

encoding

El parámetro encoding es la codificación de caracteres. Si es omitido o null, será usado el valor de la codificación de caracteres interna.

Valores devueltos

La cadena truncada. Si trim_marker está definido, trim_marker reemplaza los últimos caracteres para corresponder al tamaño width.

Historial de cambios

Versión Descripción
8.3.0 Proporcionar una width negativa a mb_strimwidth() ahora está obsoleto.
8.0.0 encoding ahora es nullable.
7.1.0 Se añadió soporte para starts y widths negativos.

Ejemplos

Ejemplo #1 Ejemplo con mb_strimwidth()

<?php
echo mb_strimwidth("Hello World", 0, 10, "...");
// Muestra: "Hello W..."
?>

Ver también

add a note

User Contributed Notes 2 notes

up
1
dregad at NOSPAM-mantisbt dot org
2 years 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...

<?php
$str
= ['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: ス
*/
>?
up
0
jamesgrimshaw2006 at gmail dot com
1 year 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>";
}

*output*
[27]abcdefghijklmnopqrstuvwxyz.
[28]abcdefghijklmnopqrstuvwxyz..
[29]abcdefghijklmnopqrstuvwxyz...
[30]abcdefghijklmnopqrstuvwxyz....
[31]abcdefghijklmnopqrstuvwxyz.....
[32]abcdefghijklmnopqrstuvwxyz......
[33]abcdefghijklmnopqrstuvwxyz.......
[34]abcdefghijklmnopqrstuvwxyz........
[35]abcdefghijklmnopqrstuvwxyz.........
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
To Top