Mb substr: примеры (PHP)

Функция mb_substr: обработка подстрок в многобайтовых кодировках
Раздел: Многобайтовые строки
mb_substr(string $string, int $start, ?int $length = null, ?string $encoding = null): string

Функция mb_substr в PHP используется для получения части строки с учетом многобайтовых кодировок, таких как UTF-8. Она применяется, когда стандартная функция substr может некорректно обрабатывать символы, занимающие более одного байта.

Аргументы функции

Функция имеет следующую сигнатуру:

mb_substr(string $string, int $start, ?int $length = null, ?string $encoding = null): string

$string – обрабатываемая строка.

$start – начальная позиция. Если значение положительное, отсчет начинается с начала строки. Если отрицательное – с конца строки.

$length – максимальная длина возвращаемой подстроки. Если не указана, возвращается часть строки до конца. При отрицательном значении символы будут отброшены с конца строки.

$encoding – параметр кодировки. Если не указан, используется внутренняя кодировка.

Примеры использования
Базовое извлечение подстроки
$str = 'Привет, мир!';
echo mb_substr($str, 0, 6);
Привет
Отрицательный начальный индекс
$str = 'Привет, мир!';
echo mb_substr($str, -4, 4);
мир!
Отрицательная длина
$str = 'Привет, мир!';
echo mb_substr($str, 0, -2);
Привет, ми
Указание кодировки
$str = 'Привет, мир!';
echo mb_substr($str, 8, null, 'UTF-8');
мир!
Похожие функции в PHP

substr – стандартная функция для работы с подстроками. Не поддерживает многобайтовые кодировки. Используется для однобайтовых строк.

mb_strcut – функция для получения части строки по количеству байтов с учетом многобайтовых кодировок. Полезна при работе с ограничениями по размеру в байтах.

iconv_substr – альтернативная функция для работы с подстроками в различных кодировках из модуля iconv.

Типичные ошибки
Использование без проверки длины строки
$str = 'Тест';
echo mb_substr($str, 0, 10);
Тест

Функция возвращает всю строку без ошибок, даже если длина превышает размер строки.

Некорректная кодировка
$str = 'Привет';
echo mb_substr($str, 0, 2, 'ASCII');
��

Указание неправильной кодировки приводит к некорректному результату.

Путаница с отрицательными индексами
$str = 'abc';
echo mb_substr($str, -5, 2);
ab

При отрицательном стартовом индексе, превышающем длину строки, отсчет начинается с начала.

Изменения в PHP 8

В PHP 8.0 параметры $length и $encoding стали nullable (допускают значение null). Ранее они имели значения по умолчанию null, но не были объявлены как nullable.

В PHP 8.2 появилось предупреждение о неявном преобразовании float в int для параметров $start и $length.

Расширенные примеры
Извлечение подстроки с использованием отрицательных параметров
Пример php
$text = 'Программирование на PHP';
$result = mb_substr($text, -10, -3);
echo $result;
на P
Обработка строки с эмодзи
Пример php
$str = 'Hello ???? World';
$part = mb_substr($str, 6, 2);
echo $part;
????
Итерация по строке с помощью mb_substr
Пример php
$str = 'Пример';
$length = mb_strlen($str);
for ($i = 0; $i < $length; $i++) {
    echo mb_substr($str, $i, 1) . " ";
}
П р и м е р
Безопасное сокращение текста
Пример php
function truncate($text, $limit) {
    if (mb_strlen($text) <= $limit) return $text;
    return mb_substr($text, 0, $limit - 3) . '...';
}
echo truncate('Длинный текст для примера', 10);
Длинный те...
Аналоги в других языках

Mb substr в Python

text = 'Привет, мир!'
result = text[0:6]
print(result)
Привет

В Python срезы строк по умолчанию работают с символами Unicode.

Mb substr в Javascript

let text = 'Привет, мир!';
let result = text.substring(0, 6);
console.log(result);
Привет

Методы строк в JavaScript работают с кодовими единицами UTF-16, что может вызывать проблемы с суррогатными парами.

Mb substr в MySQL

SELECT SUBSTRING('Привет, мир!', 1, 6);
Привет

Функция SUBSTRING в MySQL корректно работает с многобайтовыми символами при использовании соответствующей кодировки таблицы.

PHP mb_substr function comments

En
Mb substr Get part of string