
Работа со строками в PHP часто требует удаления лишних символов: пробелов в начале и конце, невидимых управляющих знаков, ограничений по длине текста. Неправильная обработка приводит к ошибкам при сравнении данных, проблемам с валидацией форм и некорректному отображению содержимого.
В PHP доступен широкий набор функций для обрезки: trim(), ltrim(), rtrim(), а также работа с substr() и многобайтовыми аналогами вроде mb_substr(). Каждая из них решает конкретную задачу: удаление пробелов, сокращение текста до нужного количества символов, сохранение корректной кодировки UTF-8.
При выборе метода стоит учитывать контекст: например, для обработки пользовательского ввода достаточно trim(), а при подготовке превью текста для интерфейса – лучше использовать mb_substr() с последующей проверкой длины. Это гарантирует корректное отображение кириллических символов и предотвращает обрезку на середине многобайтового знака.
Обрезка строки в PHP: примеры и методы
substr() – основной способ обрезки. Он принимает строку, позицию начала и длину:
$text = "Пример строки";
echo substr($text, 0, 6); // Пример
mb_substr() применяют при работе с UTF-8, чтобы корректно обрабатывать кириллицу:
$text = "Тестирование";
echo mb_substr($text, 0, 4, "UTF-8"); // Тест
rtrim(), ltrim() и trim() удаляют пробелы и символы по краям:
$text = " hello ";
echo trim($text); // hello
echo ltrim($text); // "hello "
echo rtrim($text); // " hello"
strtok() удобно использовать для обрезки до разделителя:
$text = "one,two,three";
echo strtok($text, ","); // one
Регулярные выражения позволяют гибко управлять обрезкой:
$text = "abc123def";
echo preg_replace("/\d+.*/", "", $text); // abc
Для коротких строк часто достаточно substr(), для многоязычных проектов лучше mb_substr(), а для очистки – функции trim(). Выбор зависит от задачи.
Обрезка строки по количеству символов с помощью substr()
Функция substr() позволяет получить часть строки, задав начальную позицию и длину. Синтаксис: substr(string $string, int $start, int $length = ?).
Пример обрезки до 10 символов:
$text = "Пример строки для обрезки";
$result = substr($text, 0, 10);
echo $result; // Пример стр
Если указать отрицательное значение для $start, обрезка начнется с конца:
$text = "Пример строки";
$result = substr($text, -6, 3);
echo $result; // стро
Для работы с кириллическими символами используйте mb_substr(), чтобы избежать обрезки внутри многобайтного символа:
$text = "Пример строки";
$result = mb_substr($text, 0, 6, "UTF-8");
echo $result; // Пример
Рекомендуется всегда проверять кодировку и при необходимости применять mb_substr(), так как substr() корректно работает только с однобайтными строками.
Использование mb_substr() для корректной работы с UTF-8

Функция substr() обрабатывает строку побайтно, из-за чего при обрезке символов кириллицы или эмодзи результат искажается. Для работы с многобайтовыми кодировками применяют mb_substr().
Синтаксис:
mb_substr(string $string, int $start, ?int $length = null, string $encoding = "UTF-8")
Основные параметры:
| Параметр | Описание |
|---|---|
$string |
Исходная строка |
$start |
Начальная позиция (нумерация с 0) |
$length |
Длина обрезки, если не указано – до конца строки |
$encoding |
Кодировка, по умолчанию UTF-8 |
Пример корректной обрезки:
$text = "Привет, мир 🌍";
echo mb_substr($text, 0, 9, "UTF-8"); // "Привет, м"
Без использования mb_substr() обрезка строки с эмодзи или кириллицей может вернуть некорректный результат. При работе с многоязычными данными всегда задавайте UTF-8 явно, чтобы избежать ошибок на серверах с иными настройками.
Удаление пробелов и управляющих символов через trim()
Функция trim() убирает пробелы и управляющие символы в начале и конце строки. По умолчанию удаляются:
- пробел (
" ") - табуляция (
"\t") - перевод строки (
"\n") - возврат каретки (
"\r") - символ вертикальной табуляции (
"\x0B") - нулевой байт (
"\0")
Пример базового использования:
$str = " \n\tПример текста\r\n ";
$result = trim($str);
echo $result; // "Пример текста"
Можно задать собственный список символов для удаления вторым аргументом:
$str = "###Данные###";
$result = trim($str, "#");
echo $result; // "Данные"
Для выборочной обработки доступны аналоги:
ltrim()– обрезает слеваrtrim()илиchop()– обрезает справа
Рекомендации:
- Используйте
trim()при очистке данных из форм и файлов. - Указывайте второй аргумент, если требуется удалить специфические символы.
- Для бинарных строк избегайте применения без уточнения набора символов, чтобы не потерять важные байты.
Обрезка строки справа и слева с помощью rtrim() и ltrim()

Функции rtrim() и ltrim() предназначены для удаления пробелов и указанных символов с конца и начала строки соответственно. По умолчанию rtrim() удаляет все пробельные символы справа, включая пробел, табуляцию, перенос строки. Аналогично ltrim() удаляет пробелы слева.
Пример удаления пробелов:
$text = " Пример строки ";
$trimmedRight = rtrim($text); // " Пример строки"
$trimmedLeft = ltrim($text); // "Пример строки "
Обе функции принимают второй необязательный аргумент – набор символов для удаления. Он может включать любые символы, а не только пробелы.
Пример удаления конкретных символов:
$text = "--Тест--";
$cleanRight = rtrim($text, "-"); // "--Тест"
$cleanLeft = ltrim($text, "-"); // "Тест--"
Для удаления символов с обеих сторон используется комбинация ltrim() и rtrim() либо функция trim():
$text = "##Пример##";
$clean = ltrim(rtrim($text, "#"), "#"); // "Пример"
Важно помнить, что rtrim() и ltrim() работают с каждым символом из переданного набора независимо. Например, rtrim($text, "abc") удалит все символы «a», «b» и «c» справа до первого несовпадения.
Для обработки больших объемов текста рекомендуется использовать эти функции вместо регулярных выражений, так как они быстрее и потребляют меньше памяти.
Сокращение строки с добавлением многоточия

Для обрезки длинных строк в PHP с добавлением многоточия применяется функция mb_substr() для корректной работы с многобайтными символами. Стандартный подход: проверка длины строки и добавление … при превышении лимита.
Пример функции:
function truncate($text, $length) {
if(mb_strlen($text) > $length) {
return mb_substr($text, 0, $length) . '…';
}
return $text;
}
Тестирование функции:
| Исходная строка | Максимальная длина | Результат |
|---|---|---|
| Пример длинного текста для демонстрации | 15 | Пример длинного… |
| Короткий текст | 20 | Короткий текст |
| Многобайтные символы: тестирование | 10 | Многобайтн… |
Для динамических ограничений длины можно использовать переменную $length и комбинировать с strlen() или mb_strlen() в зависимости от кодировки. Это обеспечивает корректное отображение текста с кириллицей, эмодзи и другими многобайтными символами.
При работе с HTML-контентом рекомендуется предварительно удалить теги через strip_tags(), чтобы длина считалась только по видимому тексту.
Регулярные выражения для обрезки текста по шаблону
Регулярные выражения позволяют точно выделять и обрезать части строки в PHP, опираясь на заданный шаблон. Основной инструмент – функция preg_replace(), которая заменяет совпадения регулярного выражения на указанный текст.
Примеры использования:
- Обрезка текста после определенного слова:
$text = "Пример строки для теста";
$result = preg_replace('/(Пример.*?)\s.*/', '$1', $text);
// Результат: "Пример строки"
$text = "user@example.com";
$result = preg_replace('/(@.*)/', '', $text);
// Результат: "user"
$text = "Это пример длинного текста";
$result = preg_replace('/^(.{0,10})\b.*/u', '$1', $text);
// Результат: "Это пример"
Рекомендации при работе с регулярными выражениями:
- Используйте флаг
uдля корректной обработки UTF-8. - Для обрезки по конкретным символам применяйте символьные классы:
[a-zA-Z0-9]. - Сохраняйте совпадения в скобках
(), чтобы потом использовать их в замене через$1, $2. - Тестируйте регулярные выражения на разных входных данных, чтобы избежать случайного удаления важных частей текста.
- Для динамических шаблонов используйте
preg_match()для предварительной проверки совпадений перед обрезкой.
Регулярные выражения дают гибкость, позволяя обрезать текст по сложным критериям, например:
- Удаление тегов HTML:
preg_replace('/<[^>]+>/', '', $text) - Обрезка всех символов после цифр:
preg_replace('/(\d+).*/', '$1', $text) - Выделение только первых букв каждого слова:
preg_replace('/\b(\w)\w*/u', '$1', $text)
Функция strtok() для обрезки строки до разделителя
Функция strtok() используется для разделения строки на части с помощью заданного разделителя и позволяет получить первый фрагмент до этого символа или последовательности символов.
Синтаксис:
strtok(string $string, string $delimiter): string|false
Особенности применения:
- Первый вызов функции получает строку и разделитель, возвращает первую подстроку.
- Последующие вызовы с
nullвместо строки продолжают разбор с предыдущей позиции. - Если разделитель не найден, возвращается вся строка.
- При пустой строке или достижении конца строки возвращается
false.
Пример обрезки строки до первого разделителя:
$text = "apple,banana,orange";
$first = strtok($text, ","); // Вернет "apple"
Получение всех фрагментов через цикл:
$text = "apple,banana,orange";
$token = strtok($text, ",");
while ($token !== false) {
echo $token . "\n";
$token = strtok(",");
}
Рекомендации:
- Использовать для последовательного извлечения частей строки без создания массивов.
- Применять, если требуется обходить большие строки с повторяющимися разделителями.
- Не использовать внутри вложенных функций без сохранения текущего состояния, чтобы избежать потери позиции.
Создание пользовательской функции для гибкой обрезки текста
Для точного контроля длины строки в PHP удобнее создать собственную функцию, которая учитывает многобайтовые символы, сохранение слов и добавление суффиксов. Пример функции:
function truncateText(string $text, int $length, string $suffix = '...'): string {
if (mb_strlen($text) <= $length) {
return $text;
}
$truncated = mb_substr($text, 0, $length);
 $lastSpace = mb_strrpos($truncated, ' ');
if ($lastSpace !== false) {
$truncated = mb_substr($truncated, 0, $lastSpace);
}
 return $truncated . $suffix;
}
Эта функция сокращает строку до заданной длины, при необходимости обрезает по слову и добавляет суффикс. Использование mb_strlen и mb_substr гарантирует корректную работу с UTF-8.
Пример вызова:
$text = "Пример длинного текста для демонстрации обрезки строки.";
echo truncateText($text, 25);
Функцию можно расширить, добавив параметр для выбора метода обрезки (по символу, по слову, по предложениям) или указания разных суффиксов для разных длин. Такой подход упрощает поддержку и повторное использование кода в проектах с различными требованиями к тексту.
Вопрос-ответ:
Какие функции в PHP помогают удалить лишние пробелы из строки?
В PHP для удаления пробелов в начале и конце строки используют функцию trim(). Если нужно удалить пробелы только слева, используется ltrim(), а только справа — rtrim(). Эти функции принимают строку и, при необходимости, набор символов, которые нужно убрать. Например, trim(" Пример ") вернёт "Пример", а rtrim("Текст ") вернёт "Текст", оставив начало строки без изменений.
Как обрезать строку до заданного количества символов, не повреждая кириллицу?
Стандартная функция substr() может повредить многобайтовые символы, например кириллицу. Для работы с UTF-8 используется mb_substr(), которая корректно считает каждый символ. Например, mb_substr("Привет мир", 0, 6, "UTF-8") вернёт "Привет". Эта функция полезна, если нужно обрезать текст для отображения в интерфейсе или при обработке пользовательского ввода.
Можно ли обрезать строку до определённого слова или символа?
Да, для этого используют комбинацию strpos() и substr(). Сначала strpos() ищет позицию нужного слова или символа, затем substr() возвращает часть строки до этой позиции. Например, $pos = strpos("PHP — язык программирования", "язык"); и substr("PHP — язык программирования", 0, $pos) вернёт "PHP — ". Такой способ удобен при обработке текстов или ссылок, когда нужно выделить только определённую часть строки.
Какая разница между substr() и mb_substr() в PHP?
Функция substr() работает с байтами, а не с символами, поэтому при работе с UTF-8 и другими многобайтовыми кодировками могут появляться некорректные символы. mb_substr() учитывает кодировку и возвращает правильные символы. Например, substr("Привет", 0, 3) может вернуть «При» с ошибками в кодировке, тогда как mb_substr("Привет", 0, 3, "UTF-8") вернёт «При» корректно.
Можно ли обрезать строку и одновременно добавить многоточие, если она длинная?
Да, для этого используют mb_substr() и проверку длины строки. Сначала проверяют длину строки с помощью mb_strlen(), если она больше нужного значения, обрезают её и добавляют «…». Например: if(mb_strlen($text) > 10) { $text = mb_substr($text, 0, 10, "UTF-8") . "…"; }. Такой приём часто применяют для сокращённых заголовков или описаний в интерфейсах.
Какие функции PHP можно использовать для обрезки строки по длине?
В PHP для обрезки строк чаще всего применяются функции substr(), mb_substr() и str_split(). Функция substr() позволяет получить часть строки, задавая начальный индекс и длину. Если строка содержит символы Unicode, лучше использовать mb_substr(), чтобы избежать искажений. Функция str_split() разбивает строку на массив символов или подстрок фиксированной длины, после чего можно выбрать нужные элементы.
Как обрезать строку до определённого количества символов и добавить многоточие?
Чтобы обрезать строку и добавить многоточие, можно использовать substr() для выделения нужной части и затем конкатенировать символы "…". Например: $short = substr($text, 0, 50) . '…';. При этом важно учитывать длину строки, чтобы не добавлять многоточие к пустой строке. Если текст содержит многобайтные символы, лучше применять mb_substr($text, 0, 50) . '…'; для корректного отображения символов кириллицы или эмодзи.
