PHP Velho Oeste 2024

mb_strimwidth

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

mb_strimwidthGet truncated string with specified width

Descrierea

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

Truncates string string to specified width.

Parametri

string

The string being decoded.

start

The start position offset. Number of characters from the beginning of string (first character is 0), or if start is negative, number of characters from the end of the string.

width

The width of the desired trim. Negative widths count from the end of the string.

trim_marker

A string that is added to the end of string when string is truncated.

encoding

Parametrul encoding reprezintă codificarea caracterelor. Dacă el este omis, va fi utilizată valoarea internă a codificării caracterelor.

Valorile întoarse

The truncated string. If trim_marker is set, trim_marker replaces the last chars to match the width.

Istoricul schimbărilor

Versiune Descriere
8.0.0 encoding is nullable now.
7.1.0 Support for negative starts and widths has been added.

Exemple

Example #1 mb_strimwidth() example

<?php
echo mb_strimwidth("Hello World"010"...");
// output: "Hello W..."
?>

A se vedea și

add a note add a note

User Contributed Notes 2 notes

up
1
jamesgrimshaw2006 at gmail dot com
6 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>";
     }

*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
up
0
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...

<?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: ス
*/
>?
To Top