mb_strimwidth

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

mb_strimwidthПолучает строку, обрезанную до заданной ширины

Описание

mb_strimwidth(
    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

Исходная строка.

start

Смещение от начала строки. Количество символов от начала строки (первый символ стоит в позиции 0). Если указано отрицательное число, то отсчёт будет идти с конца строки.

width

Ширина, до которой необходимо обрезать строку. Если задано отрицательное значение ширины, отсчёт будет идти с конца строки.

Замечание:

Передача отрицательного значения ширины устарела с PHP 8.3.0.

trim_marker

Строка, которая заместит конец обрезанной строки.

encoding

Параметр encoding — это кодировка символов. Если он опущен или равен null, для него будет установлена внутренняя кодировка символов.

Возвращаемые значения

Возвращает обрезанную строку. Если задан четвёртый параметр trim_marker, то его значением замещаются символы в конце строки, так, чтобы суммарный размер был не более ширины width.

Список изменений

Версия Описание
8.3.0 Передача отрицательного значения в параметр width функции mb_strimwidth() устарела.
8.0.0 Теперь параметр encoding может принимать значение null.
7.1.0 Добавлена поддержка отрицательных значений для параметров start и width.

Примеры

Пример #1 Пример использования функции mb_strimwidth()

<?php
echo mb_strimwidth("Hello World", 0, 10, "...");
// Выведет "Hello W..."
?>

Смотрите также

  • mb_strwidth() - Возвращает ширину строки
  • mb_internal_encoding() - Устанавливает/получает внутреннюю кодировку скрипта

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