W3docs

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
ParametroObbligatorioPredefinitoDescrizione
$stringLa string da suddividere.
$lengthNo76La lunghezza di ogni parte, in byte. Deve essere 1 o superiore.
$separatorNo"\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:

php— editable, runs on the server

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:

php— editable, runs on the server

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
X3NwbGl0IGZvciBNSU1FIGxpa2Ugd3JhcHBpbmcgb2YgYmFzZTY0IGRhdGEu

Cose 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, usare explode().
  • 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.
  • $length deve essere positivo. Passare 0 genera un ValueError (PHP 8+) oppure un avviso e false nelle 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.

Esercitazione

Pratica
Quale delle seguenti descrizioni fornisce informazioni corrette sulla funzione chunk_split() in PHP?
Quale delle seguenti descrizioni fornisce informazioni corrette sulla funzione chunk_split() in PHP?
Was this page helpful?