Dutch PHP Conference 2023 - Call for Papers

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

Размер вырезаемой части в символах. Отрицательные значения отсчитываются с конца.

trim_marker

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

encoding

Параметр encoding представляет собой символьную кодировку. Если он опущен или равен null, вместо него будет использовано значение внутренней кодировки.

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

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

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

Версия Описание
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

User Contributed Notes 1 note

up
0
dregad at NOSPAM-mantisbt dot org
1 month 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