Строки в PHP часто приходится обрезать до нужной длины. В этой статье мы рассмотрим самые простые и эффективные способы укоротить текст в PHP. Узнаете, как обрезать строку в PHP до нужных символов, по количеству слов и байт. Рассмотрим особенности работы с кириллицей в разных кодировках. Подберем оптимальный вариант для ваших задач.
Базовые функции для обрезки строк в PHP
Для обрезки строк в PHP есть несколько базовых функций: substr
, mb_substr
и str_replace
. Давайте разберемся, как их использовать.
Функция substr
Substr
- это стандартная функция PHP для извлечения подстроки из заданной строки. Она принимает три параметра:
- Исходная строка
- Смещение - с какого символа начинать обрезку
- Длина - сколько символов вырезать
Например, обрезаем первые 8 символов:
$string = "https://site.com/page"; $substring = substr($string, 0, 8);
Также можно обрезать строку с конца, указав отрицательное смещение:
$substring = substr($string, -7);
Подводные камни substr
У substr
есть один существенный недостаток - она плохо работает с многобайтовыми кодировками вроде UTF-8. При обрезке кириллицы могут появляться "ломаные" символы.
Решение - mb_substr
В таких случаях лучше использовать mb_substr
из библиотеки mbstring. Она корректно обрабатывает Unicode строки.
Давайте обрежем кириллицу в UTF-8:
$string = "Привет мир!"; $substring = mb_substr($string, 0, 7);
В итоге получим целый символ "Привет".
Альтернатива - str_replace
Еще один способ обрезки в PHP - через str_replace
. Эта функция заменяет все вхождения подстроки на что-то другое. Можно заменить хвост строки на пустую строку:
$substring = str_replace("/page", "", $string);
str_replace
универсален и работает с любыми кодировками.
Когда что использовать
Итак, какой способ предпочесть:
substr
- для обрезки по символам при работе только с ASCII;mb_substr
- для обрезки UTF-8 строк;str_replace
- чтобы заменить хвост строки на "".
Теперь разберем более сложные способы обрезки текста в PHP.
Обрезка строк в PHP по словам и предложениям
Иногда нужно обрезать строку не по количеству символов, а по словам или предложениям. Для этого в PHP есть несколько полезных функций.
Подсчет слов в строке
Чтобы обрезать текст по словам, сначала нужно посчитать эти слова. В PHP для этого есть:
str_word_count
- подсчитывает слова в строке;mb_str_word_count
- то же самое, но для UTF-8.
$text = "Привет мир! Как дела?"; $count = mb_str_word_count($text); // 4 слова
Обрезка по словам с explode
Чтобы разбить строку на слова, используем explode
:
$words = explode(" ", $text);
А затем берем первые N слов с помощью array_slice
:
$three_words = array_slice($words, 0, 3);
Склеиваем обратно в строку через implode
и получаем первые три слова!
Обрезка до последних слов
Аналогично можно взять последние слова, указав отрицательный индекс:
$last_words = array_slice($words, -3);
Обрезка до конкретного слова
Чтобы обрезать до определенного слова, сначала находим его позицию:
$pos = array_search("дела", $words);
А затем берем срез по этой позиции:
$words_until = array_slice($words, 0, $pos + 1);
Обрезка до знака пунктуации
Можно обрезать текст до ближайшего знака пунктуации:
$text = "Привет! Как дела? Хорошо."; $pos = strpos($text, ". "); $truncated = substr($text, 0, $pos + 1);
В результате получим текст до первой точки.
Обрезка строк по словам дает больший контроль над результатом. Выбирайте этот способ, если важно сохранить смысл текста.
Обрезка строк в PHP по количеству байт
Помимо символов, можно обрезать строку и по количеству байт. Это важно при работе с многобайтовыми кодировками вроде UTF-8.
Подсчет байт в строке
Узнать количество байт в строке можно так:
strlen
- для ASCII строк;mb_strlen
- для UTF-8.
$text = "Привет мир!"; $bytes = strlen($text); // 14 байт $bytes = mb_strlen($text, "UTF-8"); // 28 байт\
Обрезка по количеству байт
Теперь обрежем строку до 10 байт:
$truncated = mb_substr($text, 0, 10, "UTF-8");
В итоге получим строку "Привет".
Обрезка UTF-8 по символам
А вот так можно обрезать по количеству символов:
$chars = mb_substr($text, 0, 6); // Привет
При работе с UTF-8 строками обрезайте либо по байтам, либо по символам в зависимости от задачи.
Обрезка с сохранением целостности слов
Чтобы обрезка не "поломала" слова на границе, сначала разбейте текст на слова, как описано ранее. Затем посчитайте суммарную длину слов в байтах или символах. И только после этого обрежьте.
Дополнительные приемы обрезки строк в PHP
Кроме стандартных функций, есть и другие интересные способы обрезки строк в PHP.
Обрезка с добавлением символов
Часто хочется добавить многоточие или другой символ после обрезки:
$truncated = substr($text, 0, 10) . "...";
Обрезка до последнего пробела
Можно найти последний пробел перед точкой обрезки и отрезать до него:
$spacepos = strrpos($text, " ", 10); $truncated = substr($text, 0, $spacepos) . "...";
Обрезка по регулярному выражению
С помощью регулярных выражений можно гибко обрезать по шаблону:
$truncated = preg_replace('/(.{20}.?)[\s\S]*/', '$1...', $text);
Этот пример оставит первые 20 символов и добавит многоточие.
Сохранение форматирования при обрезке
Чтобы сохранить структуру HTML или Markdown при обрезке, можно использовать библиотеки на основе DOM или SimpleXML.
Подход к обрезке зависит от конкретной задачи. Экспериментируйте с разными способами, чтобы найти оптимальный для вашего случая.