Недавно я показывала, Как обрезать текст и добавить многоточие в конце силами 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 раза короче, чем планировали.
Надеюсь этот урок был полезным. Теперь вы знаете разницу между функциями обрезки и сможете выбрать ту, которая лучше подойдет под вашу задачу.