Iconv substr: примеры (PHP)
iconv_substr(string $string, int $offset, ?int $length = null, ?string $encoding = null): string|falseФункция iconv_substr в PHP
Функция iconv_substr() извлекает часть строки с учетом кодировки. Она предназначена для корректной обработки многобайтовых строк, таких как UTF-8, где один символ может занимать несколько байтов.
Функция применяется при работе с многобайтовыми кодировками, когда стандартные функции PHP (substr) могут работать некорректно. Она учитывает реальные символы, а не байты.
Синтаксис: iconv_substr(string $string, int $offset, ?int $length = null, ?string $encoding = null): string|false
1. $string - исходная строка
2. $offset - начальная позиция (может быть отрицательной)
3. $length (опционально) - длина извлекаемой части
4. $encoding (опционально) - кодировка строки
Примеры использования iconv_substr
Извлечение части строки с положительным смещением:
echo iconv_substr('Привет мир', 0, 6, 'UTF-8');Привет
Извлечение с отрицательным смещением:
echo iconv_substr('Привет мир', -3, null, 'UTF-8');мир
Использование без указания кодировки:
echo iconv_substr('Тестовая строка', 3, 5);товая
Альтернативные функции в PHP
Аналогичная функция из расширения mbstring. Предпочтительнее использовать при работе с многобайтовыми строками, если установлено расширение mbstring.
Стандартная функция PHP, которая работает с байтами, а не символами. Не подходит для многобайтовых кодировок, но быстрее для однобайтовых.
Функция из расширения intl для работы с графемными кластерами (например, символы с диакритическими знаками).
Аналоги в других языках
Iconv substr в Python
text = 'Привет мир'
print(text[0:6])Привет
Iconv substr в Javascript
let text = 'Привет мир';
console.log(text.substring(0, 6));Привет
Iconv substr в MySQL
SELECT SUBSTRING('Привет мир', 1, 6);Привет
Распространенные ошибки
echo iconv_substr('Тест', 0, 2, 'UNKNOWN_ENCODING');Warning: iconv_substr(): Wrong charset, conversion from `UNKNOWN_ENCODING' to `...' is not allowed
echo iconv_substr('Тест', 10, 2, 'UTF-8');false
echo iconv_substr([1,2,3], 0, 2, 'UTF-8');Warning: iconv_substr() expects parameter 1 to be string, array given
Изменения в PHP 8.x
В PHP 8.0 параметр $length стал nullable (может принимать значение null).
В PHP 8.1 добавлена поддержка отрицательных значений в параметре $length.
Расширенные примеры
Корректное извлечение строк с эмодзи:
$text = 'Hello ???? World ????';
echo iconv_substr($text, 6, 2, 'UTF-8');????
$text = 'Café crème';
echo iconv_substr($text, 0, 4, 'UTF-8');Café
$text = 'Программирование';
echo iconv_substr($text, 0, -5, 'UTF-8');Программи
$text = 'Текст & символы';
echo htmlspecialchars(iconv_substr($text, 0, 10, 'UTF-8'));Текст &