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| Parametro | Descrizione |
|---|---|
$string | La stringa di input da cui estrarre. |
$offset | Posizione di partenza con base zero. Un valore negativo conta dalla fine della stringa. |
$length | Opzionale. 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
$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 characterOmettendo $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; // pdfErrori 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. Usamb_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 asubstr().explode()— dividi una stringa in un array quando hai un delimitatore.trim()— rimuovi gli spazi bianchi (o altri caratteri) da entrambe le estremità.