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. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x