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: ス
*/
>?mb_strimwidth
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
mb_strimwidth
Референца за `function.mb-strimwidth.php` со подобрена типографија и навигација.
mb_strimwidth
(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
mb_strimwidth — Добиј скратен стринг со одредена ширина
= NULL
string
$string,int
$start,int
$width,string
$trim_marker = "",?string
$encoding = null): string
Скратува string string до наведениот width, каде што знаците со половина ширина се бројат како 1, а знаците со полна ширина се бројат како 2. Види » http://www.unicode.org/reports/tr11/
за детали во врска со ширините на источните азиски знаци.
Параметри
string-
На string се декодира.
start-
Почетната позиција на поместување. Број на знаци од почетокот на стрингот (првиот знак е 0), или ако почетокот е негативен, број на знаци од крајот на стрингот.
width-
Ширината на посакуваното скратување. Ако е специфицирана негативна ширина, брои од крајот на стрингот.
Забелешка:
Поминувањето негативна ширина е застарено од PHP 8.3.0.
trim_marker-
Стринг што се додава на крајот од стрингот кога стрингот е скратен.
encoding-
На
encodingпараметарот е кодирањето на карактерите. Ако е изоставен илиnull, ќе се користи внатрешната вредност за кодирање на карактерите.
Вратени вредности
Скратениот string. Ако trim_marker е поставено,
trim_marker ги заменува последните знаци за да одговара на width.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.3.0 |
Поминување негативен width to
mb_strimwidth() не е валидна опција
|
| 8.0.0 |
encoding сега е null.
|
| 7.1.0 |
се генерира грешка на ниво на Windows, а од PHP 7.4 и на други оперативни системи. startи widthПоддршката за негативни
|
Примери
Пример #1 mb_strimwidth() example
<?php
echo mb_strimwidth("Hello World", 0, 10, "...");
// output: "Hello W..."
?>Види Исто така
- mb_strwidth() - Врати ја ширината на стрингот
- mb_internal_encoding() - Постави/Земи внатрешно кодирање на карактери
Белешки од корисници 2 забелешки
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