chunk_split()
La funzione chunk_split() divide una string in parti più piccole. Sintassi e parametri della funzione chunk_split() in PHP.
La funzione PHP chunk_split() divide una string in una serie di parti di uguale lunghezza e inserisce un separatore dopo ogni parte. Non suddivide la string in un array — restituisce una singola nuova string con i separatori incorporati. Il caso d'uso classico è l'inserimento di a capo in dati lunghi e non interrotti (come contenuto codificato in Base64) in righe di larghezza fissa per la trasmissione email/MIME.
Questo capitolo tratta la sintassi, tutti i parametri, esempi eseguibili e le insidie più comuni.
Sintassi
chunk_split(string $string, int $length = 76, string $separator = "\r\n"): string| Parametro | Obbligatorio | Predefinito | Descrizione |
|---|---|---|---|
$string | Sì | — | La string da suddividere. |
$length | No | 76 | La lunghezza di ogni parte, in byte. Deve essere 1 o superiore. |
$separator | No | "\r\n" | La string inserita dopo ogni parte. |
La funzione restituisce la nuova string. Il separatore viene aggiunto dopo ogni parte — inclusa l'ultima — quindi il risultato termina sempre con un separatore finale.
I valori predefiniti sono scelti con criterio: 76 caratteri con terminazione di riga \r\n (CRLF) è esattamente quanto raccomandato dalla RFC 2045 per i corpi dei messaggi codificati MIME.
Esempio di base
Divide una string in parti di 20 caratteri usando il separatore predefinito \r\n:
Ogni 20 caratteri, chunk_split() inserisce un ritorno a capo + avanzamento riga (\r\n). In un terminale, \r\n appare come un'interruzione di riga, quindi l'output ha questo aspetto:
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.Si noti che ogni riga visibile contiene esattamente 20 caratteri della string originale — la funzione conta i caratteri, non le parole, quindi può spezzare una parola a metà. Se si ha bisogno di un a capo basato sulle parole, usare wordwrap().
Usare un separatore personalizzato
Il terzo parametro consente di scegliere cosa inserire dopo ogni parte. In questo esempio si usa un singolo a capo ("\n") al posto del predefinito \r\n:
L'output:
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.Il separatore può essere qualsiasi string, non solo un'interruzione di riga. Con chunk_split("abcdefghij", 4, "-") si ottiene abcd-efgh-ij- — si noti il - finale dopo l'ultima parte, che è più corta.
Caso d'uso reale: suddivisione dei dati Base64
Il motivo per cui esiste chunk_split() è la posta elettronica. L'output Base64 è una singola riga lunga e non interrotta, ma i corpi MIME devono andare a capo ogni 76 caratteri. Combinando base64_encode() con chunk_split() si ottiene testo pronto per la trasmissione:
<?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");
?>Questo suddivide la string Base64 in righe di 76 caratteri:
SGVsbG8gV29ybGQsIHRoaXMgaXMgYSBsb25nZXIgc3RyaW5nIHRvIGRlbW9uc3RyYXRlIGNodW5r
X3NwbGl0IGZvciBNSU1FIGxpa2Ugd3JhcHBpbmcgb2YgYmFzZTY0IGRhdGEuCose a cui prestare attenzione
- Separatore finale.
chunk_split()aggiunge sempre il separatore anche dopo l'ultima parte. Se non lo si desidera, eliminarlo con trim:rtrim(chunk_split($s, 20), "\r\n"). - Restituisce una string, non un array. Per dividere una string in un array di parti di lunghezza fissa, usare
str_split(). Per dividere su un delimitatore, usareexplode(). - La lunghezza è misurata in byte. Con testo multibyte (UTF-8), una parte può cadere nel mezzo di un carattere multibyte e corromperne la codifica.
chunk_split()è sicuro solo per dati a singolo byte come ASCII o Base64. $lengthdeve essere positivo. Passare0genera unValueError(PHP 8+) oppure un avviso efalsenelle versioni precedenti.
Funzioni correlate
wordwrap()— va a capo su una string entro una larghezza data, rispettando i confini delle parole.str_split()— divide una string in un array di parti di uguale lunghezza.explode()— divide una string in un array usando un delimitatore.nl2br()— inserisce interruzioni di riga HTML prima dei caratteri di nuova riga.