PHP
Substr в PHP: как обрезать строку по символам
Короткий ответ: substr() в PHP возвращает часть строки. Вы указываете строку, позицию начала и при необходимости длину: substr($text, 0, 10). Для русских строк чаще используйте mb_substr(), потому что substr() работает с байтами, а не с символами
substr() полезен для коротких кодов, технических строк, slug, токенов, артикулов и английского текста. Для пользовательского русского текста безопаснее mb_substr()
Простой пример
<?php
$text = 'Hello, PHP';
echo substr($text, 0, 5);
Результат
Hello
Первый аргумент — строка. Второй — позиция, с которой начать. Третий — сколько символов взять, если говорить про ASCII-строки
Начало строки
<?php
$code = 'ORDER-2026-001';
echo substr($code, 0, 5);
Результат
ORDER
Позиции считаются с нуля. Первый символ имеет позицию 0
Конец строки
Отрицательная позиция отсчитывается от конца
<?php
$file = 'photo.jpg';
echo substr($file, -3);
Результат
jpg
Так можно получить расширение, но для реального файла лучше использовать специальные функции вроде pathinfo()
Обрезка текста для превью
<?php
$title = 'Learning PHP step by step';
$shortTitle = substr($title, 0, 12);
echo $shortTitle . '...';
Результат
Learning PHP ...
Для английского текста это работает ожидаемо. Для русского текста может появиться битая строка, если символ был разрезан посередине
Почему с кириллицей нужен mb_substr
<?php
$text = 'Привет, PHP';
echo substr($text, 0, 6);
Такой код может вернуть некорректный результат, потому что русские буквы занимают больше одного байта. Правильнее так
<?php
$text = 'Привет, PHP';
echo mb_substr($text, 0, 6, 'UTF-8');
Результат
Привет
Если сайт работает с русским языком, сразу привыкайте к mb_substr() для видимого текста
Длина может быть отрицательной
<?php
$text = 'abcdef';
echo substr($text, 1, -1);
Результат
bcde
Код начинает с позиции 1 и отбрасывает последний символ. Такой прием встречается реже, но полезно понимать, почему результат не всегда очевиден
Мини-практика
Создайте массив заголовков и выведите короткую версию каждого заголовка до 20 символов через mb_substr(). Добавьте многоточие только если исходная строка длиннее 20 символов
<?php
$title = 'Большой урок по строкам в PHP';
$preview = mb_substr($title, 0, 20, 'UTF-8');
if (mb_strlen($title, 'UTF-8') > 20) {
$preview .= '...';
}
echo $preview;
Так вы сделаете не просто обрезку, а аккуратное превью
Частые ошибки
Используют substr для русских строк Для кириллицы берите mb_substr()
Забывают, что индекс начинается с нуля Первый символ находится на позиции 0, а не 1
Обрезают HTML как обычный текст Можно сломать тег и получить некорректную разметку
Добавляют многоточие всегда Если строка короткая, многоточие не нужно
Что почитать дальше по PHP
Если нужен общий маршрут по теме, откройте рубрику PHP. Для соседних задач пригодятся эти разборы:
- Как изменить адресную строку в PHP: редирект, красивые адрес и History API
- Комментарии в PHP: как закомментировать строку и часть кода
- Composer в PHP: установка пакетов без ручного копирования
- Joomla: как убрать index.php из адреса сайта