chunk_split()
La fonction chunk_split() divise une chaîne en morceaux de taille égale et insère un séparateur après chaque morceau.
La fonction PHP chunk_split() découpe une chaîne en une série de morceaux de longueur égale et insère un séparateur après chaque morceau. Elle ne décompose pas la chaîne en array — elle retourne une nouvelle chaîne unique avec les séparateurs intégrés. Le cas d'usage classique est d'envelopper des données longues et ininterrompues (comme du contenu encodé en Base64) en lignes de largeur fixe pour la transmission par e-mail/MIME.
Ce chapitre couvre la syntaxe, chaque paramètre, des exemples exécutables et les pièges qui surprennent souvent les développeurs.
Syntaxe
chunk_split(string $string, int $length = 76, string $separator = "\r\n"): string| Paramètre | Requis | Défaut | Description |
|---|---|---|---|
$string | Oui | — | La chaîne à découper. |
$length | Non | 76 | La longueur de chaque morceau, en octets. Doit être 1 ou supérieur. |
$separator | Non | "\r\n" | La chaîne insérée après chaque morceau. |
La fonction retourne la nouvelle chaîne. Le séparateur est ajouté après chaque morceau — y compris le dernier — donc le résultat se termine toujours par un séparateur final.
Les valeurs par défaut sont intentionnelles : 76 caractères avec un saut de ligne \r\n (CRLF) correspond exactement à ce que recommande RFC 2045 pour les corps de messages encodés en MIME.
Exemple de base
Diviser une chaîne en morceaux de 20 caractères en utilisant le séparateur \r\n par défaut :
Toutes les 20 caractères, chunk_split() insère un retour chariot + saut de ligne (\r\n). Dans un terminal, le \r\n apparaît comme un saut de ligne, donc la sortie ressemble à ceci :
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.Notez que chaque ligne visible contient exactement 20 caractères de la chaîne d'origine — la fonction compte les caractères, pas les mots, elle peut donc couper les mots en plein milieu. Si vous avez besoin d'un renvoi à la ligne tenant compte des mots, utilisez wordwrap().
Utiliser un séparateur personnalisé
Le troisième paramètre vous permet de choisir ce qui est inséré après chaque morceau. Ici nous utilisons un simple saut de ligne ("\n") à la place du \r\n par défaut :
La sortie :
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.Le séparateur peut être n'importe quelle chaîne, pas seulement un saut de ligne. Avec chunk_split("abcdefghij", 4, "-") vous obtenez abcd-efgh-ij- — remarquez le - final après le dernier morceau, plus court.
Cas d'usage réel : envelopper des données Base64
La raison d'être de chunk_split() est l'e-mail. La sortie Base64 est une longue ligne ininterrompue, mais les corps MIME doivent être coupés à 76 caractères. Combiner base64_encode() avec chunk_split() produit un texte prêt à la transmission :
<?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");
?>Cela découpe la chaîne Base64 en lignes de 76 caractères :
SGVsbG8gV29ybGQsIHRoaXMgaXMgYSBsb25nZXIgc3RyaW5nIHRvIGRlbW9uc3RyYXRlIGNodW5r
X3NwbGl0IGZvciBNSU1FIGxpa2Ugd3JhcHBpbmcgb2YgYmFzZTY0IGRhdGEuPoints de vigilance
- Séparateur final.
chunk_split()ajoute toujours le séparateur après le dernier morceau également. Si vous ne le souhaitez pas, supprimez-le avec :rtrim(chunk_split($s, 20), "\r\n"). - Elle retourne une chaîne, pas un array. Pour diviser une chaîne en array de morceaux de longueur fixe, utilisez
str_split(). Pour diviser sur un délimiteur, utilisezexplode(). - La longueur est mesurée en octets. Avec du texte multioctet (UTF-8), un morceau peut tomber au milieu d'un caractère multioctet et le corrompre.
chunk_split()est sûre en termes d'octets uniquement pour les données à un seul octet comme l'ASCII ou le Base64. $lengthdoit être positif. Passer0déclenche uneValueError(PHP 8+) ou un avertissement etfalsedans les versions antérieures.
Fonctions associées
wordwrap()— envelopper une chaîne à une largeur donnée en respectant les limites des mots.str_split()— diviser une chaîne en array de morceaux de longueur égale.explode()— diviser une chaîne en array à l'aide d'un délimiteur.nl2br()— insérer des sauts de ligne HTML avant les retours à la ligne.