Обрезаем строки в PHP: легкие способы укоротить текст

Строки в 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.

Подход к обрезке зависит от конкретной задачи. Экспериментируйте с разными способами, чтобы найти оптимальный для вашего случая.

Статья закончилась. Вопросы остались?
Комментарии 0
Подписаться
Я хочу получать
Правила публикации
Редактирование комментария возможно в течении пяти минут после его создания, либо до момента появления ответа на данный комментарий.