chunk_split()
A função chunk_split() divide uma string em partes menores e insere um separador após cada parte. Veja a sintaxe e exemplos práticos.
A função chunk_split() do PHP divide uma string em uma série de partes de comprimento igual e insere um separador após cada parte. Ela não divide a string em um array — ela retorna uma única string nova com os separadores já incorporados. O caso de uso clássico é envolver dados longos e ininterruptos (como conteúdo codificado em Base64) em linhas de largura fixa para transmissão por e-mail/MIME.
Este capítulo aborda a sintaxe, todos os parâmetros, exemplos executáveis e os pontos de atenção que costumam causar confusão.
Sintaxe
chunk_split(string $string, int $length = 76, string $separator = "\r\n"): string| Parâmetro | Obrigatório | Padrão | Descrição |
|---|---|---|---|
$string | Sim | — | A string a ser dividida em partes. |
$length | Não | 76 | O comprimento de cada parte, em bytes. Deve ser 1 ou maior. |
$separator | Não | "\r\n" | A string inserida após cada parte. |
A função retorna a nova string. O separador é acrescentado após cada parte — incluindo a última — portanto o resultado sempre termina com um separador no final.
Os padrões são intencionais: 76 caracteres com terminação de linha \r\n (CRLF) é exatamente o que o RFC 2045 recomenda para corpos de mensagens codificadas em MIME.
Exemplo básico
Divida uma string em partes de 20 caracteres usando o separador padrão \r\n:
A cada 20 caracteres, chunk_split() insere um retorno de carro + avanço de linha (\r\n). Em um terminal, o \r\n aparece como uma quebra de linha, portanto a saída tem este aspecto:
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.Observe que cada linha visível contém exatamente 20 caracteres da string original — a função conta caracteres, não palavras, portanto pode dividir palavras ao meio. Se você precisar de quebra de linha respeitando palavras, use wordwrap().
Usando um separador personalizado
O terceiro parâmetro permite escolher o que inserir após cada parte. Aqui usamos uma única quebra de linha ("\n") em vez do \r\n padrão:
A saída:
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.O separador pode ser qualquer string, não apenas uma quebra de linha. Com chunk_split("abcdefghij", 4, "-") você obtém abcd-efgh-ij- — observe o - final após a última parte, que é mais curta.
Caso de uso real: envolvendo dados Base64
O motivo pelo qual chunk_split() existe é o e-mail. A saída Base64 é uma longa linha ininterrupta, mas os corpos MIME devem ser quebrados em 76 caracteres. Combinar base64_encode() com chunk_split() produz um texto pronto para transmissão:
<?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");
?>Isso divide a string Base64 em linhas de 76 caracteres:
SGVsbG8gV29ybGQsIHRoaXMgaXMgYSBsb25nZXIgc3RyaW5nIHRvIGRlbW9uc3RyYXRlIGNodW5r
X3NwbGl0IGZvciBNSU1FIGxpa2Ugd3JhcHBpbmcgb2YgYmFzZTY0IGRhdGEuPontos de atenção
- Separador no final.
chunk_split()sempre acrescenta o separador após a última parte também. Se você não quiser isso, remova-o:rtrim(chunk_split($s, 20), "\r\n"). - Retorna uma string, não um array. Para dividir uma string em um array de partes de comprimento fixo, use
str_split(). Para dividir por um delimitador, useexplode(). - O comprimento é medido em bytes. Com texto multibyte (UTF-8), uma parte pode cair no meio de um caractere multibyte e corrompê-lo.
chunk_split()é segura apenas para dados de byte único, como ASCII ou Base64. $lengthdeve ser positivo. Passar0dispara umValueError(PHP 8+) ou um aviso efalseem versões mais antigas.
Funções relacionadas
wordwrap()— quebra uma string em uma largura definida nos limites de palavras.str_split()— divide uma string em um array de partes de comprimento igual.explode()— divide uma string em um array usando um delimitador.nl2br()— insere quebras de linha HTML antes de novas linhas.