chunk_split()
La función chunk_split() divide una cadena en fragmentos más pequeños e inserta un separador tras cada uno.
La función PHP chunk_split() divide una cadena en una serie de fragmentos de igual longitud e inserta un separador después de cada uno. No divide la cadena en un array — devuelve una nueva cadena única con los separadores incorporados. El caso de uso clásico es envolver datos largos y continuos (como contenido codificado en Base64) en líneas de ancho fijo para la transmisión por correo electrónico/MIME.
Este capítulo cubre la sintaxis, cada parámetro, ejemplos ejecutables y los problemas comunes que suelen causar errores.
Sintaxis
chunk_split(string $string, int $length = 76, string $separator = "\r\n"): string| Parámetro | Requerido | Valor por defecto | Descripción |
|---|---|---|---|
$string | Sí | — | La cadena a dividir en fragmentos. |
$length | No | 76 | La longitud de cada fragmento, en bytes. Debe ser 1 o mayor. |
$separator | No | "\r\n" | La cadena insertada después de cada fragmento. |
La función devuelve la nueva cadena. El separador se añade después de cada fragmento — incluido el último — por lo que el resultado siempre termina con un separador al final.
Los valores por defecto son deliberados: 76 caracteres con un salto de línea \r\n (CRLF) es exactamente lo que recomienda el RFC 2045 para los cuerpos de mensajes codificados en MIME.
Ejemplo básico
Divide una cadena en fragmentos de 20 caracteres usando el separador \r\n predeterminado:
Cada 20 caracteres, chunk_split() inserta un retorno de carro + salto de línea (\r\n). En una terminal, \r\n aparece como un salto de línea, por lo que la salida tiene 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.Tenga en cuenta que cada línea visible contiene exactamente 20 caracteres de la cadena original — la función cuenta caracteres, no palabras, por lo que puede dividir palabras por la mitad. Si necesita un ajuste de línea consciente de las palabras, use wordwrap().
Uso de un separador personalizado
El tercer parámetro permite elegir qué insertar después de cada fragmento. Aquí usamos un salto de línea simple ("\n") en lugar del \r\n predeterminado:
La salida:
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.El separador puede ser cualquier cadena, no solo un salto de línea. Con chunk_split("abcdefghij", 4, "-") se obtiene abcd-efgh-ij- — nótese el - al final después del último fragmento, que es más corto.
Caso de uso real: envolver datos Base64
La razón por la que existe chunk_split() es el correo electrónico. La salida de Base64 es una línea larga e ininterrumpida, pero los cuerpos MIME deben ajustarse a 76 caracteres. Combinar base64_encode() con chunk_split() produce texto listo para transmitir:
<?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");
?>Esto divide la cadena Base64 en líneas de 76 caracteres:
SGVsbG8gV29ybGQsIHRoaXMgaXMgYSBsb25nZXIgc3RyaW5nIHRvIGRlbW9uc3RyYXRlIGNodW5r
X3NwbGl0IGZvciBNSU1FIGxpa2Ugd3JhcHBpbmcgb2YgYmFzZTY0IGRhdGEuAspectos a tener en cuenta
- Separador al final.
chunk_split()siempre añade el separador también después del último fragmento. Si no lo desea, recórtelo:rtrim(chunk_split($s, 20), "\r\n"). - Devuelve una cadena, no un array. Para dividir una cadena en un array de fragmentos de longitud fija, use
str_split(). Para dividir con un delimitador, useexplode(). - La longitud se mide en bytes. Con texto multibyte (UTF-8), un fragmento puede caer en medio de un carácter multibyte y corromperlo.
chunk_split()solo es segura a nivel de bytes con datos de un solo byte como ASCII o Base64. $lengthdebe ser positivo. Pasar0provoca unValueError(PHP 8+) o una advertencia yfalseen versiones anteriores.
Funciones relacionadas
wordwrap()— ajusta una cadena a un ancho determinado respetando los límites de las palabras.str_split()— divide una cadena en un array de fragmentos de igual longitud.explode()— divide una cadena en un array usando un delimitador.nl2br()— inserta saltos de línea HTML antes de los saltos de línea.