mb_strimwidth

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

mb_strimwidthGet truncated string with specified width

설명

string mb_strimwidth ( string $str , int $start , int $width [, string $trimmarker = "" [, string $encoding = mb_internal_encoding() ]] )

Truncates string str to specified width.

인수

str

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.

trimmarker

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

encoding

encoding 인수는 문자 인코딩입니다. 생략하면, 내부 문자 인코딩값을 사용합니다.

반환값

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

변경점

버전 설명
7.1.0 Support for negative starts and widths has been added.

예제

Example #1 mb_strimwidth() example

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

참고

add a note add a note

User Contributed Notes 2 notes

up
1
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
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