mb_strimwidth
Обрезает строку ( string ) string до длины width символов, где символы половинной ширины считаются как 1 , а символы полной ширины считаются как 2 . Смотрите » http://www.unicode.org/reports/tr11/ для получения подробной информации о ширине символов Восточной Азии.
Список параметров
Смещение от начала строки. Количество символов от начала строки (первый символ стоит в позиции 0). Если указано отрицательное число, то отсчёт будет идти с конца строки.
Размер вырезаемой части в символах. Отрицательные значения отсчитываются с конца.
Строка, которая заместит конец обрезанной строки.
Параметр encoding представляет собой символьную кодировку. Если он опущен или равен null , вместо него будет использовано значение внутренней кодировки.
Возвращаемые значения
Обрезанная строка. Если задан четвёртый аргумент trim_marker , то его значением замещаются последние символы строки, так чтобы суммарный размер был не более width .
Список изменений
| Версия | Описание |
|---|---|
| 8.0.0 | Теперь параметр encoding может принимать значение null . |
| 7.1.0 | Добавлена поддержка отрицательных start и width . |
Примеры
Пример #1 Пример использования mb_strimwidth()
echo mb_strimwidth ( «Hello World» , 0 , 10 , «. » );
// Выведет «Hello W. »
?>?php
Смотрите также
- mb_strwidth() — Возвращает ширину строки
- mb_internal_encoding() — Установка/получение внутренней кодировки скрипта
User Contributed Notes 2 notes
23 days 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 $socialmediatext .= ‘.’;
$Twittext = mb_strimwidth($socialmediatext,0,35,$HashTags);
echo «
[«.strlen($Twittext).»]$Twittext
«;
>
*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
6 months 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.
$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_check_encoding
- mb_chr
- mb_convert_case
- mb_convert_encoding
- mb_convert_kana
- mb_convert_variables
- mb_decode_mimeheader
- mb_decode_numericentity
- mb_detect_encoding
- mb_detect_order
- mb_encode_mimeheader
- mb_encode_numericentity
- mb_encoding_aliases
- mb_ereg_match
- mb_ereg_replace_callback
- mb_ereg_replace
- mb_ereg_search_getpos
- mb_ereg_search_getregs
- mb_ereg_search_init
- mb_ereg_search_pos
- mb_ereg_search_regs
- mb_ereg_search_setpos
- mb_ereg_search
- mb_ereg
- mb_eregi_replace
- mb_eregi
- mb_get_info
- mb_http_input
- mb_http_output
- mb_internal_encoding
- mb_language
- mb_list_encodings
- mb_ord
- mb_output_handler
- mb_parse_str
- mb_preferred_mime_name
- mb_regex_encoding
- mb_regex_set_options
- mb_scrub
- mb_send_mail
- mb_split
- mb_str_pad
- mb_str_split
- mb_strcut
- mb_strimwidth
- mb_stripos
- mb_stristr
- mb_strlen
- mb_strpos
- mb_strrchr
- mb_strrichr
- mb_strripos
- mb_strrpos
- mb_strstr
- mb_strtolower
- mb_strtoupper
- mb_strwidth
- mb_substitute_character
- mb_substr_count
- mb_substr
- Copyright © 2001-2023 The PHP Group
- My PHP.net
- Contact
- Other PHP.net sites
- Privacy policy
Как обрезать строку до нужной длинны и добавить в конце многоточие?
всем привет. Пытаюсь реализовать «обрезание» меню с 15 символов до 12с установкой многоточия в конце в php.. Обрезать получается, а многоточие установить нет. Как это сделать првильно?
Отслеживать
529 3 3 серебряных знака 10 10 бронзовых знаков
задан 22 мая 2020 в 13:04
7 1 1 бронзовый знак
$str = ‘Long text’ + ‘. ‘
22 мая 2020 в 13:08с помощью оператора конкатенации (‘.’) php.net/manual/ru/language.operators.string.php. Вот из мануала пример: ‘$a = «Привет, «; $b = $a . «Мир!»; // $b теперь содержит строку «Привет, Мир!»‘
22 мая 2020 в 13:09
@doox911 Это в джсе прокатит.
22 мая 2020 в 13:15
@u_mulder точно))))
22 мая 2020 в 13:29
Править не могу ответ)
22 мая 2020 в 13:301 ответ 1
Сортировка: Сброс на вариант по умолчанию
с помощью PHP можно делать вот так к примеру:
$text = "Допустим здесь ваш текст из 15 символов"; $text = mb_substr($text,0,12, 'UTF-8'); //12 это кол. знаков echo $text.'. ';Отслеживать
ответ дан 22 мая 2020 в 17:16
189 3 3 бронзовых знакаСовсем не верно! Слово может обрезаться на середине, что портит картину, ко всему этому точки в любом случаи будут добавлены. Необходимо проверить через count количество символов, если оно больше, чем нужный нам объем текста, то добавляем точки. В противном случаи они не нужны + проверку, чтобы слово не обрезалось на середине.
Обрезка строки до нужной длины на PHP.
На новостных сайтах и не только очень часто приходится выводить список новостей, статей в виде анонса. В анонс необходимо выводить не только картинку и название, но и короткий текст, чтобы посетитель представлял о чем идет речь. Итак, давайте рассмотрим простую функцию реализации анонсового текста.
=$cx)/если строка длинее заданного значения $str = substr(strip_tags($str),0,$cx);//обрезаем текст до нужной длины, убираем html теги $str_cx = strrpos($str,' ');//находим позицию последнего пробела $str = substr($str,0,$str_cx);//обрезаем до позиции $str_cx $str.=". ";//добавляем многоточие в конец получившейся строки > if (strlen($str) <6) return $str;//не обрезаем строку короче 6 символов echo $str;//печать >$str = 'Рекламная площадка, конечно, индуцирует институциональный рекламный бриф, размещаясь во всех медиа. Тактика выстраивания отношений с коммерческими агентами развивает общественный анализ зарубежного опыта, повышая конкуренцию. Более того, пресс-клиппинг нетривиален. Целевой трафик позиционирует план размещения, не считаясь с затратами.'; print_cut_text($str); //Рекламная площадка, конечно, индуцирует институциональный рекламный бриф, размещаясь во всех медиа. Тактика. print_cut_text($str,30); //Рекламная площадка, конечно. ?>В функцию отправляем две переменные: строку и длину анонса. Функция определяет конец строки и укорачивает текст до нужной длины, «округляя» строку. В результате получается красивая и лаконичная фраза с многоточием на конце. Посетитель будет обязан перейти на детальную страницу и прочитать ее полностью =)
PHP: substr и мощные альтернативы, чтобы вырезать часть строки
Поговорим о том, как обрезать строку в PHP. Функция substr в предназначена для получения части строки. Она выделяет подстроку из переданной строки и возвращает её. Для этого нужно указать строку, порядковый номер символа, начиная с которого нужно вырезать строку, порядковый номер символа, до которого мы верезаем подстроку.
Обратите внимание, что substr неправильно работает с многобайтовыми кодировками, поэтому мы будем использовать mb_substr, которая работает с ними корректно. Об этой проблеме немного ниже.
mb_substr( string $string, int $start, int|null $length = null, string|null $encoding = null ): string
- $string — строка, из которой мы будем вырезать подстроку
- $start — символ, с которого мы будем вырезать подстроку
- $length — сколько символов мы будем вырезать (по умолчанию будем вырезать все оставшиеся)
- $encoding — кодировка
Теперь перейдем к примерам.
Получаем строку начиная с определенного символа
$url = 'https://phpstack.ru/admin/'; $result = mb_substr($url, 8); echo $result; // результат: phpstack.ru/admin/
Мы вырезали первые 8 символов из строки, содержащей URL адрес.
Получаем определенное количество символов
Теперь давайте вырежем еще и «/admin/» в конце.
Мы бы могли сделать это указав количество символов, которое нужно взять, оно равно количеству символов в домене, их 11
$url = 'https://phpstack.ru/admin/'; $result = mb_substr($url, 8, 11); // возьмем 11 символов начиная с 8-го echo $result; // результат: phpstack.ru
Вырезаем символы с конца
Что если мы не знаем количества символов в домене, но знаем что нужно вырезать строку «/admin/», длина которой составляет 7 символов? Иными словами нам нужно вырезать с конца.
В таком случае нужно указать отрицательное число:
$url = 'https://phpstack.ru/admin/'; $result = mb_substr($url, 8, -7); // удаляем 8 символов с начала и 7 символов с конца echo $result; // результат: phpstack.ru
Получаем несколько последних символов
Что если нам нужно вернуть наоборот только 7 последних символов? Тогда код будет следующим:
$url = 'https://phpstack.ru/admin/'; $result = mb_substr($url, -7); // Получаем 7 символов с конца, остальное удаляем echo $result; // результат: /admin/
Получаем первый символ строки
$url = 'https://phpstack.ru/admin/'; $result = mb_substr($url, 0, 1); // Начиная с 0 берем 1 символ echo $result; // результат: h
Получаем последний символ строки
$url = 'https://phpstack.ru/admin/'; $result = mb_substr($url, -1); // начинаем на 1 символ относительно конца echo $result; // результат: /
Получение подстроки по регулярному выражению
Если вам не хватает возможностей substr, возможно вам необходим более мощный инструмент: preg_match — эта функция позволяет получить подстроки по регулярному выражению.
Проблема при работе с многобайтовыми кодировками.
Рассмотрим такой пример:
$url = 'привет'; $result1 = mb_substr($url, 3); // удаляем 3 символа с начала $result2 = substr($url, 3); // удаляем 3 символа с начала var_dump($result1); // вет var_dump($result2); // �ивет
Что случилось? Почему в первом случае, где мы использовали mb_substr все сработало хорошо, а во втором случае вернулся какой-то битый символ?
Дело в том, что в UTF-8 кириллица кодируется 2 байтам, вместо одного. substr считает, что символ равен байту и поэтому вырезает 3 байта с начала. Таким образом она вырезала букву «П», и только половину буквы «Р». В общем вы поняли: всегда используйте mb_substr когда работаете с текстом, который потенциально может содержать многобайтовые символы.
Продвинутая работа со строками
Если вы часто работаете со строками, вам пригодится это расширение: symfony/string
С его помощью вы сможете легко вырезать строки. Взгляните на несколько примеров:
// returns a substring which starts at the first argument and has the length of the // second optional argument (negative values have the same meaning as in PHP functions) u('Symfony is great')->slice(0, 7); // 'Symfony' u('Symfony is great')->slice(0, -6); // 'Symfony is' u('Symfony is great')->slice(11); // 'great' u('Symfony is great')->slice(-5); // 'great' // reduces the string to the length given as argument (if it's longer) u('Lorem Ipsum')->truncate(3); // 'Lor' u('Lorem Ipsum')->truncate(80); // 'Lorem Ipsum' // the second argument is the character(s) added when a string is cut // (the total length includes the length of this character(s)) u('Lorem Ipsum')->truncate(8, '…'); // 'Lorem I…' // if the third argument is false, the last word before the cut is kept // even if that generates a string longer than the desired length u('Lorem Ipsum')->truncate(8, '…', false); // 'Lorem Ipsum'