W3docs

chunk_split()

Функция chunk_split() разбивает строку на небольшие фрагменты и вставляет разделитель после каждого.

Функция PHP chunk_split() разбивает строку на серию фрагментов одинаковой длины и вставляет разделитель после каждого из них. Она не делит строку на array — она возвращает единую новую строку со встроенными разделителями. Классический сценарий применения — перенос длинных непрерывных данных (например, содержимого в кодировке Base64) на строки фиксированной ширины для передачи по электронной почте или через MIME.

В этой главе рассматриваются синтаксис, все параметры, выполняемые примеры и типичные ошибки, с которыми сталкиваются разработчики.

Синтаксис

chunk_split(string $string, int $length = 76, string $separator = "\r\n"): string
ПараметрОбязателенПо умолчаниюОписание
$stringДаСтрока, которую нужно разбить на фрагменты.
$lengthНет76Длина каждого фрагмента в байтах. Должна быть не менее 1.
$separatorНет"\r\n"Строка, вставляемая после каждого фрагмента.

Функция возвращает новую строку. Разделитель добавляется после каждого фрагмента — включая последний, — поэтому результат всегда заканчивается завершающим разделителем.

Значения по умолчанию выбраны не случайно: 76 символов с окончанием строки \r\n (CRLF) — именно то, что рекомендует RFC 2045 для тел сообщений в кодировке MIME.

Базовый пример

Разбиваем строку на фрагменты по 20 символов, используя разделитель \r\n по умолчанию:

php— editable, runs on the server

Каждые 20 символов chunk_split() вставляет возврат каретки и перевод строки (\r\n). В терминале \r\n отображается как перенос строки, поэтому вывод выглядит следующим образом:

Lorem ipsum dolor si
t amet, consectetur 
adipiscing elit. Nul
la at nulla justo, e
get luctus tortor. M
aecenas vel est at m
assa aliquam semper.

Обратите внимание, что каждая видимая строка содержит ровно 20 символов исходной строки — функция считает символы, а не слова, поэтому слова могут быть разбиты посередине. Если вам нужен перенос с учётом слов, используйте wordwrap().

Использование пользовательского разделителя

Третий параметр позволяет выбрать, что вставлять после каждого фрагмента. Здесь мы используем одиночный перевод строки ("\n") вместо \r\n по умолчанию:

php— editable, runs on the server

Результат:

Lorem ipsum dolor si
t amet, consectetur 
adipiscing elit. Nul
la at nulla justo, e
get luctus tortor. M
aecenas vel est at m
assa aliquam semper.

Разделителем может быть любая строка, а не только перенос строки. При вызове chunk_split("abcdefghij", 4, "-") результат будет abcd-efgh-ij- — обратите внимание на завершающий - после последнего, более короткого фрагмента.

Практический пример: перенос данных Base64

Функция chunk_split() создавалась для работы с электронной почтой. Вывод Base64 представляет собой одну длинную непрерывную строку, однако тела MIME-сообщений должны переноситься каждые 76 символов. Объединение base64_encode() с chunk_split() создаёт текст, готовый к передаче:

<?php
$data = "Hello World, this is a longer string to demonstrate chunk_split for MIME like wrapping of base64 data.";
$encoded = base64_encode($data);
echo chunk_split($encoded, 76, "\n");
?>

Это разбивает строку Base64 на строки по 76 символов:

SGVsbG8gV29ybGQsIHRoaXMgaXMgYSBsb25nZXIgc3RyaW5nIHRvIGRlbW9uc3RyYXRlIGNodW5r
X3NwbGl0IGZvciBNSU1FIGxpa2Ugd3JhcHBpbmcgb2YgYmFzZTY0IGRhdGEu

На что обратить внимание

  • Завершающий разделитель. chunk_split() всегда добавляет разделитель и после последнего фрагмента. Если он не нужен, обрежьте его: rtrim(chunk_split($s, 20), "\r\n").
  • Функция возвращает string, а не array. Чтобы разбить строку на array фрагментов фиксированной длины, используйте str_split(). Чтобы разбить строку по разделителю, используйте explode().
  • Длина измеряется в байтах. При работе с многобайтовым (UTF-8) текстом фрагмент может оказаться в середине многобайтового символа и повредить его. chunk_split() безопасна только для однобайтовых данных, таких как ASCII или Base64.
  • $length должна быть положительной. Передача 0 вызывает ValueError (PHP 8+) или предупреждение и возвращает false в более старых версиях.

Связанные функции

  • wordwrap() — перенос строки по заданной ширине на границах слов.
  • str_split() — разбивает строку на array фрагментов одинаковой длины.
  • explode() — разбивает строку на array с использованием разделителя.
  • nl2br() — вставляет HTML-переносы строк перед символами новой строки.

Практика

Практика
Какое из следующих описаний верно характеризует функцию chunk_split() в PHP?
Какое из следующих описаний верно характеризует функцию chunk_split() в PHP?
Was this page helpful?