Как извлечь часть текста в php

/ 👁 2404

Недавно я показывала, Как обрезать текст и добавить многоточие в конце силами CSS.

Такие кусочки текста часто бываю нужны для анонсов, чтобы все одинаковые блоки выглядели ровно и красиво, чтобы текст не вылазил за пределы блока и не ломал вёрстку.

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

Сегодня посмотрим, как можно извлечь часть текста силами PHP.

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

Функции для обрезки текста в PHP

В нашем распоряжении есть функции:

  • substr
  • mb_substr
  • mb_strcut

Давайте для начала создадим самую простую разметку. Сделаем контейнер, зададим ему стили. Объявим в php переменную, которая будет содержать текст и поместим эту переменную в наш контейнер. Всё очень просто. Всё это я делаю в созданном файла с расширением .php.

Для примера я помещаю всё в 1 файл. На практике лучше хранить стили в подключаемом файле таблицы стилей. Ну и ваш текст вы скорее всего будете получать из базы данных.

 

<?php
$str = 'Это моя строка, которую я хочу обрезать с помощью php. Сделаю ее подлиннее, чтобы увидеть эффект';
?>

<style>
    .box{
        width: 200px;
        height: 50px;
        background: blanchedalmond;
        box-shadow: 1px 2px 3px lightgray;
        padding: 10px;
        font-family: sans-serif;
        font-size: 16px;
    }
</style>

<div class="box"><?= $str; ?></div>

Результат этого кода будет таким:

Как видим, наша строка не помещается в контейнер. Сейчас будем обрезать ее с помощью разных функций и смотреть эффект.

Обрезаем с помощью substr

Функция принимает:

  • строку,
  • номер символа в строке, с которого следует начинать
  • и длину символов

Возвращает обрезанную подстроку.

Изменим наш php код на следующий и посмотрим эффект:

 

<?php
$str = 'Это моя строка, которую я хочу обрезать с помощью php. Сделаю ее подлиннее, чтобы увидеть эффект';
$str = substr($str, 0, 25);
?>

Я специально взяла длину равную нечетному числу, чтобы мы могли увидеть, как эта функция может отработать с кириллицей.

С многбайтовыми кодировками эта функция работает не так как хотелось бы, поэтому для русскоязычного текста больше подойдет mb_substr.

Обрезаем строку с помощью mb_substr

Проделаем тоже самое, но теперь будем использовать mb_substr.

Эта функция принимает те же параметры плюс еще один – кодировку.

Давайте посмотрим.

 

<?php
$str = 'Это моя строка, которую я хочу обрезать с помощью php. Сделаю ее подлиннее, чтобы увидеть эффект';
$str = mb_substr($str, 0, 25, 'UTF-8');
?>

А вот результат:

Уже лучше.

Обрезаем строку с помощью mb_strcut

mb_strcut в отличает от mb_substr оперирует не символами, а байтами. Однако при этом, если конец вырезаемой строки попадет между байтами, то она вырежет строку с первого байта, а значит багов быть не должно.

Принимает также как и mb_substr 4 параметра:

  • строка
  • символ начала
  • длина
  • кодировка

Последние 2 параметра являются необязательными.

Давайте попробуем.

 

<?php
$str = 'Это моя строка, которую я хочу обрезать с помощью php. Сделаю ее подлиннее, чтобы увидеть эффект';
$str = mb_strcut($str, 0, 25);
?>

Результат:

Можно заметить, что строка получилась короче, чем при использовании mb_substr.

Это именно потому, что mb_substr оперирует символами, а mb_strcut байтами. А кириллические символы кодируются в 2 байта. Об этом также стоит помнить, выбирая функцию для обрезки, чтобы не получить строку в 2 раза короче, чем планировали.

Надеюсь этот урок был полезным. Теперь вы знаете разницу между функциями обрезки и сможете выбрать ту, которая лучше подойдет под вашу задачу.

Tags:

Leave a Reply