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

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

  • автор:

mb_strimwidth

Обрезает строку ( string ), переданную в параметр string , до заданой в параметре width ширины символов, где символы половинной ширины рассчитываются как 1 , а символы полной ширины — как 2 . Подробнее о ширине восточноазиатских символов рассказано в приложении » http://www.unicode.org/reports/tr11/.

Список параметров

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

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

Замечание:

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

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

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

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

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

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

Версия Описание
8.3.0 Передача отрицательного значения в параметр width функции mb_strimwidth() устарела.
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

10 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: ス
*/
>?

4 months 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

  • Функции для работы с многобайтовыми строками
    • 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-2024 The PHP Group
    • My PHP.net
    • Contact
    • Other PHP.net sites
    • Privacy policy

    substr обрезать строку PHP

    Возвращает часть строки, заданную параметрами offset и length.

    Параметры

    Строка, с которой будет работать функция.

    If offset is non-negative, the returned string will start at the offset’th position in string, counting from zero. For instance, in the string ‘abcdef’, the character at position 0 is ‘a’, the character at position 2 is ‘c’, and so forth.

    If offset is negative, the returned string will start at the offset’th character from the end of string.

    If string is less than offset characters long, an empty string will be returned.

    Пример #1 Использование отрицательного значения offset

    If length is given and is positive, the string returned will contain at most length characters beginning from offset (depending on the length of string).

    If length is given and is negative, then that many characters will be omitted from the end of string (after the start position has been calculated when a offset is negative). If offset denotes the position of this truncation or beyond, an empty string will be returned.

    If length is given and is 0, false or null, an empty string will be returned.

    If length is omitted, the substring starting from offset until the end of the string will be returned.

    Пример #2 Использование отрицательного значения length

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

    Функция substr() возвращает часть строки или пустую строку.

    mb_strcut

    Функция mb_strcut() вырезает подстроку из строки также, как функция mb_substr() , но оперирует байтами вместо символов. Если начало вырезаемой части попадает между байтами одного символа, функция вырежет подстроку, начиная с первого байта этого символа. Это существенное отличие от функции substr() , которая просто вырежет подстроку, начиная с середины символа, и этим нарушит последовательность байтов в строке.

    Список параметров

    Если значение параметра start неотрицательное, возвращённая строка начнётся с позиции start в байтах от начала строки string , считая с нуля. Например, в строке « abcdef » байт в позиции 0 — это « a », байт в позиции 2 — « c » и т. д.

    Если значение параметра start отрицательное, возвращаемая строка будет начинаться с байта start с обратным отсчётом от конца строки string . Однако, если величина отрицательного start превышает длину строки, возвращаемая часть начнётся с начала параметра string .

    Длина подстроки в байтах. Если не указана, то передаётся значение NULL и вырезаются все байты до конца строки.

    Если значение параметра length отрицательное, возвращаемая строка будет заканчиваться байтом length с обратным отсчётом от конца строки string . Однако, если величина отрицательного значения length превышает число символов после позиции start , будет возвращена пустая строка.

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

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

    Возвращает часть строки string , заданную аргументами start и length .

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

    Версия Описание
    8.0.0 Теперь параметр encoding может принимать значение null .

    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'

    Свежие записи

    • SQL UPDATE: примеры обновления строк в таблице
    • PHP: substr и мощные альтернативы, чтобы вырезать часть строки
    • Степень в C, C++ и С#: как возвести число в любую степень, побитовые операции
    • Скачать ShowKeyPlus: ссылка на последнюю официальную версию, скачивание, установка
    • Как создать файл в Linux: 12 способов
    • SQL INSERT INTO: примеры вставки строк в таблицу БД MySQL
    • PHP: str_replace — замена или удаление подстроки в строке
    • Функция date() в php: распространенные форматы, примеры, советы
    • cURL в PHP: примеры POST, GET запросов с headers, cookie, JSON и многопоточностью
    • JSON в PHP: примеры json_encode, json_decode, работа с кириллицей и utf-8
    • Файл gitignore — примеры и документация
    • Сортировка массивов в php: ksort, asort и прочие sort’ы
    • jQuery onclick: как выполнить код при клике на кнопку
    • 500 Internal Server Error — в чем причина?
    • SMTP от Yandex: как отправить письма из PHP — пример настроек
    • No such file or directory — в чем причина?
    • Как получить первый элемент массива в php
    • Cтроку в массив по разделителю в PHP: explode, str_split, strtok — что выбрать?
    • 301 редирект на https с www через htaccess
    • Как в php добавить к массиву другой массив?
    • 301 редирект на https без www с помощью htaccess
    • Регулярные выражения в PHP
    • PHP json_decode — как декодировать результат в массив?
    • Yii2 ActiveRecord шпаргалка по составлению запросов
    • Поиск подстроки в строке с помощью PHP
    • Отправка почты на php
    • Как подключить php код в html
    • Конвертировать массив в строку при помощи PHP
    • Подключение одного php файла в другой
    • Подборка ссылок для веб-разработчика
    • Проблема с кириллицей в PHPWord

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

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