Как обрезать строку в php
Перейти к содержимому

Как обрезать строку в php

  • автор:

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. »
?>

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

  • 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:30

    1 ответ 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) 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'

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *