Строки в PHP: базовые функции для новичка на практике
За полчаса вы научитесь измерять длину строки, искать и заменять подстроки, обрезать пробелы и безопасно работать с кириллицей в PHP 8.x. С готовыми примерами, которые можно запустить сразу.

К концу этой инструкции вы сможете взять любую строку в PHP — имя пользователя, кусок текста из формы, адрес — и обработать её: измерить длину, найти нужный фрагмент, заменить, обрезать лишние пробелы и разбить на части. Всё на PHP 8.x. Времени уйдёт минут 30, если запускать примеры по ходу.
Главная ловушка, о которой предупреждаю сразу: в PHP есть два набора строковых функций. Обычные (strlen, substr) считают байты, а функции с приставкой mb_ считают символы. Для латиницы разницы нет, а для кириллицы и эмодзи — есть, и большая. Разберём и то, и другое.
Что нужно до начала
- PHP версии 8.0 или новее. Проверьте командой
php -vв терминале — должна вывестись строка видаPHP 8.2.0. - Расширение
mbstringдля корректной работы с кириллицей. Проверьте:php -m | grep mbstring— если в ответе появилосьmbstring, всё на месте. На большинстве хостингов оно включено по умолчанию. - Любой текстовый редактор и возможность запускать PHP-файл: либо через
php script.phpв терминале, либо загрузив файл на хостинг и открыв в браузере.
Все примеры ниже — самостоятельные файлы. Создайте один strings.php и вставляйте туда фрагменты по очереди.
Шаг 1. Создать строку и вывести её
Строку можно записать в одинарных или двойных кавычках. Разница в том, что двойные кавычки подставляют значения переменных внутрь, а одинарные — нет.
<?php
// PHP 8.x
$name = 'Мария';
// Двойные кавычки: переменная подставится
echo "Привет, $name\n";
// Одинарные кавычки: текст выведется буквально
echo 'Привет, $name\n';
Запустите php strings.php. В терминале должно появиться:
Привет, Мария
Привет, $name\n
Обратите внимание: во второй строке $name и \n вывелись как есть — одинарные кавычки ничего не интерпретируют. Это не ошибка, а разница поведения.
Шаг 2. Измерить длину строки
Здесь начинается та самая ловушка с байтами и символами. Сравните два способа на кириллице.
<?php
$text = 'Привет';
// strlen считает БАЙТЫ
echo strlen($text) . "\n"; // 12 — в UTF-8 кириллица занимает 2 байта на символ
// mb_strlen считает СИМВОЛЫ
echo mb_strlen($text) . "\n"; // 6 — то, что мы обычно имеем в виду
Результат: strlen вернёт 12, а mb_strlen — 6. Для проверки длины пароля, имени или заголовка почти всегда нужен mb_strlen. Иначе пользователь с русским именем неожиданно упрётся в лимит вдвое раньше.
Правило на всю статью: если в строке может оказаться кириллица или эмодзи — берите функцию с приставкой mb_. Ошибка с байтами не даёт исключения, она просто молча портит длину и обрезку.
Шаг 3. Найти подстроку
Функция mb_strpos возвращает позицию первого вхождения подстроки — или false, если не нашлось. Позиции считаются с нуля.
<?php
$email = 'ivanov@example.com';
$pos = mb_strpos($email, '@');
if ($pos !== false) {
echo "Символ @ на позиции $pos\n"; // Символ @ на позиции 6
} else {
echo "Символа @ нет\n";
}
Проверяйте результат именно через !== false, а не через if ($pos). Если подстрока стоит в самом начале, позиция будет 0, и обычная проверка if посчитает это ложью. Это классическая ошибка новичка.
Просто проверить, есть ли подстрока
С PHP 8.0 для проверки наличия есть отдельная понятная функция str_contains — она возвращает true или false и не заставляет думать про позиции.
<?php
$text = 'заказ №4587 оформлен';
if (str_contains($text, 'оформлен')) {
echo "Заказ готов\n";
}
Рядом живут str_starts_with и str_ends_with — тоже из PHP 8.0. Все три работают побайтно, но для проверки наличия ASCII-разделителей это неважно.
Шаг 4. Вырезать часть строки
Функция mb_substr берёт кусок строки от заданной позиции. Второй аргумент — старт, третий — сколько символов взять.
<?php
$phone = '+79161234567';
// первые 2 символа
echo mb_substr($phone, 0, 2) . "\n"; // +7
// последние 4 символа (отрицательный старт)
echo mb_substr($phone, -4) . "\n"; // 4567
Отрицательный старт отсчитывается от конца строки — удобно, чтобы вытащить хвост, не зная общей длины.
Шаг 5. Заменить подстроку
Для замены используется str_replace. Она заменяет все вхождения сразу и работает с кириллицей корректно, потому что оперирует байтовыми последовательностями целиком.
<?php
$text = 'Стоимость: 1000 руб. Доставка: 300 руб.';
$result = str_replace('руб.', '₽', $text);
echo $result . "\n";
// Стоимость: 1000 ₽ Доставка: 300 ₽
Можно передать массивы: str_replace(['а', 'б'], ['x', 'y'], $text) заменит «а» на «x» и «б» на «y» за один вызов.
Шаг 6. Убрать лишние пробелы
Когда данные приходят из формы, по краям часто оказываются пробелы и переносы строк. Функция trim срезает их с обоих концов.
<?php
$input = " почта@site.ru \n";
$clean = trim($input);
echo "[$clean]\n"; // [почта@site.ru]
Квадратные скобки в примере — просто чтобы визуально увидеть границы строки. Есть варианты ltrim (только слева) и rtrim (только справа).
Шаг 7. Сменить регистр
Здесь опять нужны mb-версии, иначе кириллица не изменится.
<?php
$name = 'мария иванова';
echo mb_strtoupper($name) . "\n"; // МАРИЯ ИВАНОВА
echo mb_strtolower('ПРИВЕТ') . "\n"; // привет
// Первую букву — заглавной, но у mb-версии нет прямого аналога ucfirst.
// Собираем вручную:
$first = mb_strtoupper(mb_substr($name, 0, 1));
$rest = mb_substr($name, 1);
echo $first . $rest . "\n"; // Мария иванова
Обычная strtoupper('привет') вернёт кириллицу без изменений — она умеет только латиницу. Это частый повод для «почему буквы не меняются».
Шаг 8. Разбить строку и собрать обратно
explode режет строку по разделителю в массив, implode собирает массив обратно в строку.
<?php
$csv = 'яблоко,груша,слива';
$fruits = explode(',', $csv);
// $fruits = ['яблоко', 'груша', 'слива']
echo $fruits[1] . "\n"; // груша
$joined = implode(' | ', $fruits);
echo $joined . "\n"; // яблоко | груша | слива
Это основа для разбора простых списков и строк с параметрами.
Коротко: какая функция для чего
| Задача | Функция | Осторожно с кириллицей? |
|---|---|---|
| Длина строки | mb_strlen | Да, берите mb-версию |
| Проверить наличие | str_contains | Нет |
| Найти позицию | mb_strpos | Да |
| Вырезать кусок | mb_substr | Да |
| Заменить | str_replace | Нет |
| Обрезать пробелы | trim | Нет |
| Сменить регистр | mb_strtoupper / mb_strtolower | Да |
| Разбить / собрать | explode / implode | Нет |
Если не получилось
- Call to undefined function mb_strlen() — не подключено расширение
mbstring. На своём сервере включите его вphp.iniи перезапустите PHP; на хостинге ищите переключатель расширений в панели управления. - Кириллица выводится как
????илиПривет— файл сохранён не в UTF-8 либо страница отдаётся в другой кодировке. Сохраните файл в UTF-8 без BOM и добавьтеheader('Content-Type: text/html; charset=utf-8');в начале скрипта, если выводите в браузер. - strlen на русском слове даёт вдвое больше, чем ожидали — это не баг. Вы считаете байты. Замените на
mb_strlen. - Проверка
if (strpos(...))не срабатывает, хотя подстрока есть — подстрока стоит в начале, позиция0воспринимается как «ложь». Используйте!== falseили перейдите наstr_contains. - strtoupper не меняет русские буквы — обычная версия работает только с латиницей. Возьмите
mb_strtoupper.
Что дальше
Когда базовые функции стали привычными, следующий шаг — форматирование через sprintf (удобно для чисел и выравнивания) и знакомство с регулярными выражениями через preg_match и preg_replace для сложного поиска по шаблону. Регулярки — отдельная большая тема, здесь мы её не трогали намеренно. Полный список строковых функций с примерами есть в официальной документации PHP в разделе Strings — держите её открытой, пока пишете.
Инфографика для маркетплейса: Три главных преимущества товара короткими фразами, выноски в безопасной зоне превью, точный размер площадки.
Спросить за 60 ₽Источники: PHP Manual — Strings Functions, PHP Manual — Multibyte String (mbstring)
Частые вопросы
У меня PHP 7.4, а не 8.x — примеры сработают?
Зачем везде mb_-функции, если код и так работает?
Что делать, если mbstring недоступно на хостинге?
Почему после echo буквы превратились в кракозябры?
Чем отличается одинарная кавычка от двойной в строке?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.