W3docs

substr()

La funzione substr() in PHP estrae una porzione di stringa. Utile per lavorare con applicazioni basate su testo.

La funzione substr() restituisce una porzione di una stringa — i caratteri compresi tra una posizione di partenza e una lunghezza opzionale. È uno degli strumenti per le stringhe più utilizzati in PHP: rimuovere prefissi, prendere i primi N caratteri di un'etichetta, leggere un campo a larghezza fissa o estrarre un'estensione di file si riducono tutti a una chiamata a substr(). Questa pagina illustra la sintassi, tutti i modi in cui si comportano gli argomenti $start e $length (compresi i valori negativi), i casi limite che tratti in inganno e quando è preferibile usare mb_substr().

Sintassi

substr(string $string, int $offset, ?int $length = null): string
ParametroDescrizione
$stringLa stringa di input da cui estrarre.
$offsetPosizione di partenza con base zero. Un valore negativo conta dalla fine della stringa.
$lengthOpzionale. Quanti caratteri restituire. Omettilo (o passa null) per leggere fino alla fine della stringa. Un valore negativo significa "fermati tanti caratteri prima della fine."

substr() restituisce la sottostringa estratta. A partire da PHP 8.0 restituisce sempre una stringa (una stringa vuota quando non trova corrispondenze); prima di PHP 8.0 restituiva false in caso di errore, quindi potresti ancora trovarlo in codice precedente.

Un esempio di base

php— editable, runs on the server

$offset è 0, quindi l'estrazione inizia dal primo carattere, e $length è 5, quindi vengono restituiti cinque caratteri (Hello). Ricorda che l'offset è a base zero: la posizione 0 è H, la posizione 1 è e, e così via.

Come funziona l'offset

Un offset positivo conta dall'inizio; un offset negativo conta dalla fine (dove -1 è l'ultimo carattere):

<?php
$string = "Hello World!";

echo substr($string, 6);   // World!  — from offset 6 to the end
echo "\n";
echo substr($string, -6);  // World!  — last 6 characters
echo "\n";
echo substr($string, -1);  // !       — just the last character

Omettendo $length si restituisce tutto dall'offset in avanti — utile per rimuovere un prefisso noto.

Come funziona la lunghezza

Un $length positivo limita il numero di caratteri da prendere. Un $length negativo si ferma tanti caratteri prima della fine della stringa, ideale per eliminare un suffisso noto:

<?php
$string = "Hello World!";

echo substr($string, 0, -1);   // Hello World  — drop the trailing "!"
echo "\n";
echo substr($string, -6, 5);   // World        — start 6 from the end, take 5
echo "\n";
echo substr($string, 4, 0);    // (empty)      — length 0 returns ""

Se la lunghezza richiesta supera la fine della stringa, substr() restituisce semplicemente ciò che è disponibile — non genera mai un errore per "lunghezza eccessiva."

Uso pratico: un'estensione di file

Combinare substr() con strrpos() (che trova l'ultima posizione di un carattere) è il modo classico per leggere un'estensione di file:

<?php
$filename = "report.final.pdf";
$ext = substr($filename, strrpos($filename, ".") + 1);

echo $ext; // pdf

Errori comuni

  • Offset fuori intervallo. Se $offset è maggiore della lunghezza della stringa, si ottiene una stringa vuota (in PHP 8+). Non c'è un comportamento circolare.
  • Conta i byte, non i caratteri. substr() opera sui byte. Per testo UTF-8 con lettere accentate o emoji, tagliare a metà di un carattere produce caratteri errati. Usa mb_substr() per un'estrazione sicura con caratteri multibyte.
  • Errore di uno con la lunghezza. $length è un conteggio, non un indice finale. substr($s, 2, 3) restituisce 3 caratteri a partire dall'indice 2 — non i caratteri tra l'indice 2 e l'indice 3.

Funzioni correlate

  • strlen() — ottieni la lunghezza di una stringa, spesso usata per calcolare un $length.
  • strpos() — trova dove inizia una sottostringa, da passare a substr().
  • explode() — dividi una stringa in un array quando hai un delimitatore.
  • trim() — rimuovi gli spazi bianchi (o altri caratteri) da entrambe le estremità.

Esercizio

Pratica
Qual è l'utilizzo della funzione substr() in PHP?
Qual è l'utilizzo della funzione substr() in PHP?
Was this page helpful?