Menu

PHP substr(): estrarre una parte di una stringa

substr($string, $offset, $length) restituisce una parte di una stringa. Impara gli offset negativi, come ottenere i primi o gli ultimi caratteri, mb_substr per il testo giapponese e altro UTF-8, substr_count e come tagliare un testo con i puntini di sospensione.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

substr($string, $offset, $length) restituisce la parte di $string che inizia alla posizione $offset (contata da 0) ed è lunga $length caratteri. substr('Hello world', 0, 5) restituisce "Hello". Ometti $length per ottenere tutto fino alla fine.

substr() conta i byte. Per il testo inglese è lo stesso che contare i caratteri, ma non per giapponese, cinese, emoji o lettere accentate. Per quelli usa mb_substr(), mostrata più avanti.

Sintassi

substr(string $string, int $offset, ?int $length = null): string
  • $offset è il punto da cui partire. 0 è il primo carattere. Un valore negativo conta dalla fine.
  • $length è quanti byte prendere (in un semplice testo ASCII un byte è un carattere). Un valore negativo ne lascia fuori quel numero alla fine. null (o ometterlo) significa "fino alla fine".

Offset e lunghezza negativi: lavorare dalla fine

Un $offset negativo inizia a contare dalla fine della stringa, quindi -1 è l'ultimo carattere. Una $length negativa si ferma quel numero di caratteri prima della fine.

substr($s, 0, -1) è il modo abituale per rimuovere l'ultimo carattere, per esempio una virgola finale lasciata da un ciclo.

Ottenere il primo o l'ultimo carattere

Per un singolo byte puoi anche indicizzare direttamente la stringa. $s[0] è il primo carattere e, da PHP 7.1, $s[-1] è l'ultimo.

Indicizzare una posizione che non esiste stampa un warning, mentre substr() restituisce semplicemente una stringa vuota. Se la stringa potrebbe essere vuota, preferisci substr().

Fuori intervallo: una stringa vuota, non false

Se $offset è oltre la fine della stringa, substr() restituisce "" in PHP 8. In PHP 7 restituiva false, quindi il vecchio codice che controlla === false non funziona più.

Testo giapponese: usa mb_substr

UTF-8 memorizza i kana e i kanji comuni in 3 byte ciascuno (i kanji rari come 𠮷 e le emoji ne occupano 4). substr() conta i byte, quindi substr('こんにちは', 0, 3) restituisce solo こ, e una lunghezza che non cade al confine di un carattere taglia a metà un carattere e produce testo rotto. mb_substr() accetta gli stessi argomenti e conta i caratteri.

Lo stesso vale per le emoji e le lettere accentate come é. Per contare i caratteri si usa mb_strlen(); vedi strlen() per byte e caratteri.

Accorciare un testo con i puntini di sospensione

Tagliare un titolo lungo per una lista o una scheda è l'uso reale più comune di substr(). Usa mb_substr() così un titolo giapponese non viene mai tagliato a metà carattere, e aggiungi ... solo quando hai davvero accorciato qualcosa.

mb_strimwidth($text, 0, $width, '...') fa lo stesso in base alla larghezza di visualizzazione, dove un carattere giapponese a larghezza piena conta 2 colonne e una lettera latina 1. È adatta ai layout a larghezza fissa.

Contare una sottostringa con substr_count

substr_count($haystack, $needle) restituisce quante volte compare $needle. Distingue maiuscole e minuscole e non conta le corrispondenze sovrapposte.

substr con strpos: testo prima o dopo un carattere

Combina substr() con strpos() per tagliare a un carattere di cui non conosci in anticipo la posizione, come la @ in un indirizzo email:

Verifica che strpos() non abbia restituito false prima di usarne il risultato: se il carattere manca, false viene trattato come 0 senza alcun warning, quindi substr('nobody', 0, $at) restituisce "" e substr('nobody', $at + 1) restituisce "obody".

Domande frequenti

Come ottengo gli ultimi caratteri di una stringa in PHP?

Usa un offset negativo: substr($s, -3) restituisce gli ultimi 3 caratteri. Per un testo che può contenere giapponese o altri caratteri multibyte, usa mb_substr($s, -3).

Qual è la differenza tra substr e mb_substr?

substr() conta i byte e mb_substr() conta i caratteri. In UTF-8 i kana e i kanji comuni occupano 3 byte ciascuno, quindi substr('日本語', 0, 2) taglia a metà un carattere, mentre mb_substr('日本語', 0, 2) restituisce "日本".

Cosa restituisce substr se l'inizio è oltre la fine della stringa?

Una stringa vuota. Da PHP 8.0, substr('abc', 5) restituisce ""; PHP 7 restituiva false.

Come rimuovo l'ultimo carattere di una stringa in PHP?

substr($s, 0, -1) restituisce tutto tranne l'ultimo byte. Usa mb_substr($s, 0, -1) per il testo multibyte, oppure rtrim($s, ',') se vuoi rimuovere solo un carattere finale specifico.

Come conto quante volte compare una sottostringa in PHP?

substr_count($haystack, $needle): substr_count('banana', 'an') restituisce 2. Distingue maiuscole e minuscole e non conta le corrispondenze sovrapposte.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA