Menu

PHP trim(): rimuovere gli spazi da una stringa

trim($string) rimuove spazi, tabulazioni e a capo da entrambe le estremità di una stringa; ltrim() e rtrim() puliscono un solo lato. Impara a rimuovere caratteri specifici, lo spazio giapponese a larghezza piena e ogni valore di un array.

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

trim($string) restituisce la stringa senza gli spazi bianchi all'inizio e alla fine: spazi, tabulazioni, a capo, ritorni a capo, byte NUL e tabulazioni verticali. ltrim() li rimuove solo dall'inizio e rtrim() solo dalla fine. Gli spazi in mezzo restano.

L'output di var_dump() mostra la lunghezza di ogni risultato, il che rende visibili i caratteri rimossi. Il trim è la prima cosa da fare con la maggior parte dei valori di un form (le password sono l'eccezione, vedi la fine della pagina): un utente che scrive ada@example.com con uno spazio finale deve comunque poter accedere.

Sintassi

trim(string $string, string $characters = " \n\r\t\v\0"): string
ltrim(string $string, string $characters = " \n\r\t\v\0"): string
rtrim(string $string, string $characters = " \n\r\t\v\0"): string

trim() restituisce una nuova stringa; non modifica la variabile che passi.

Rimuovere caratteri specifici

Il secondo argomento sostituisce la lista di default. Ogni carattere al suo interno viene rimosso dalle estremità, in qualsiasi ordine e qualsiasi numero di volte. .. definisce un intervallo, quindi 'a..z' significa ogni lettera minuscola.

Per continuare a rimuovere anche gli spazi bianchi normali, includili nella lista: trim($s, " \n\r\t\v\0/").

Il secondo argomento è un insieme di caratteri, non una stringa

trim() non rimuove una parola o un suffisso. Rimuove uno qualsiasi dei caratteri che elenchi, da entrambe le estremità, finché non incontra un carattere che non è nella lista. Questo sorprende chi prova a togliere l'estensione di un file:

La prima riga rimuove anche la h iniziale, perché h è nell'insieme. Per rimuovere un prefisso o un suffisso fisso, usa str_starts_with() o str_ends_with() con substr(), oppure str_replace() se il testo non può comparire altrove.

Rimuovere lo spazio a larghezza piena (input giapponese)

Le tastiere giapponesi producono spesso lo spazio ideografico   (U+3000), per esempio intorno a un nome scritto in un form. Non è nella lista di default di trim, e indicarlo nel secondo argomento è una trappola: trim() lavora byte per byte, lo spazio è formato dai 3 byte E3 80 80, ed E3 è anche il primo byte di ogni carattere hiragana e katakana, quindi un nome che inizia con uno di essi perde il primo byte di quel carattere. Usa un'espressione regolare con il modificatore u:

\A e \z ancorano all'inizio e alla fine della stringa. Con il modificatore u, \s corrisponde a ogni spazio Unicode: gli spazi bianchi ASCII, lo spazio a larghezza piena e lo spazio non separabile (U+00A0) che il copia e incolla dalle pagine web porta spesso con sé. Senza u, \s corrisponde solo agli spazi bianchi ASCII e lo spazio a larghezza piena resta. PHP 8.4 aggiunge mb_trim(), mb_ltrim() e mb_rtrim() per questo; su PHP 8.3 e precedenti la strada è l'espressione regolare.

Fare il trim di ogni valore di un array

array_map('trim', $array) ripulisce ogni valore e mantiene le chiavi. Un caso tipico è una lista separata da virgole presa da un campo di testo, divisa con explode():

Fare il trim di un valore di un form prima di validarlo

Prima il trim, poi il controllo della stringa vuota. Un campo che contiene solo spazi viene così rifiutato come vuoto. Esegui questo blocco, scrivi nel form un nome con degli spazi intorno e premi Send: lo stesso script viene eseguito di nuovo con $_POST compilato.

Non fare il trim delle password: uno spazio alla fine di una password ne fa parte.

Domande frequenti

Cosa rimuove trim() in PHP?

Di default, da entrambe le estremità della stringa: spazi, tabulazioni (\t), a capo (\n), ritorni a capo (\r), byte NUL (\0) e tabulazioni verticali (\v). Non tocca mai il centro della stringa.

Qual è la differenza tra trim, ltrim e rtrim?

trim() pulisce entrambe le estremità, ltrim() solo l'inizio e rtrim() solo la fine. Tutte e tre accettano la stessa lista facoltativa di caratteri da rimuovere.

Perché trim() non rimuove lo spazio giapponese a larghezza piena?

Lo spazio a larghezza piena (U+3000) non è nella lista di default di trim e in UTF-8 occupa 3 byte. Usa preg_replace('/\A\s+|\s+\z/u', '', $s): con il modificatore u, \s corrisponde a ogni spazio Unicode, U+3000 compreso. PHP 8.4 aggiunge mb_trim(), che rimuove anche quello.

Come rimuovo l'ultima virgola da una stringa in PHP?

rtrim($s, ',') rimuove ogni virgola finale. Se può seguirla uno spazio, includi anche lo spazio: rtrim($s, ', ').

Come faccio il trim di ogni valore di un array?

array_map('trim', $array) restituisce un nuovo array con ogni valore ripulito, mantenendo le chiavi. Per gli array annidati, usa array_walk_recursive() con un riferimento.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA