Durante lo sviluppo di un'applicazione web, capita spesso di dover manipolare stringhe di testo in base alle proprie esigenze. Fortunatamente PHP mette a disposizione numerose funzioni per gestire le stringhe.
Vediamo quali sono quelle più utilizzate e a cosa serve ciascuna di esse.
Indice dei contenuti
Una delle funzioni più utilizzate con le stringhe è sicuramente la funzione strlen()
, che prende come argomento una stringa e ne calcola la lunghezza in caratteri (spazi inclusi).
Questa funzione torna utile quando vogliamo validare un valore inserito dall'utente che deve avere lunghezza fissa, come il CAP di una città.
<?php
$cap = "97100";
if (strlen($cap) != 5) {
echo "Il CAP deve avere lunghezza pari a 5";
}
Alcune funzioni di stringa hanno anche la controparte mb_*
per operare su stringhe in formato multibyte, ossia stringhe in formato Unicode come ad esempio UTF-8. Queste funzioni sono utilizzabili tramite l'estensione mbstring (Multibyte String) del linguaggio.
Ad esempio, la funzione strlen()
ha la sua controparte nella funzione mb_strlen()
.
Vediamo un esempio
<?php
$title = "Ultime novità di PHP";
echo strlen($title)."\n"; // 21
echo mb_strlen($title)."\n"; // 20
La variabile $title
contiene una stringa con un carattere multibyte (la a accentata à), ossia un carattere che PHP memorizza con due byte anziché uno. Ricordiamo che una stringa in PHP è memorizzata come fosse un array di caratteri, ciascuno dei quali occupa un byte.
Alla riga 4 l'output di strlen()
dà come risultato 21, nonostante la stringa abbia lunghezza 20. Questo perché la funzione conta i byte, così come sono memorizzati nella variabile.
La funzione mb_strlen()
invece, introdotta proprio per risolvere questo problema, ritorna il conteggio esatto.
Il confronto tra stringhe in PHP può essere fatto tramite l'operatore di confronto ==
, che verifica l'uguaglianza tra due variabili.
Vediamo un esempio
<?php
$string = "Pippo";
if ($string == "Pippo") {
echo "Le stringhe sono uguali";
} else {
echo "Le stringhe non sono uguali";
}
// Le stringhe sono uguali
Tuttavia gli operatori di confronto non sono l’unico modo per confrontare due stringhe. PHP mette a disposizione la funzione strcmp()
che prese due stringhe come parametro, ritorna un numero intero:
0
se la prima stringa è minore della seconda.0
se la prima stringa è maggiore della seconda.0
se le stringhe sono uguali.Nota: Una stringa è minore di un'altra se viene prima di questa in ordine alfabetico. Nel caso di stringhe contenenti maiuscole, minuscole e cifre viene rispettato il seguente ordine: prima le cifre, poi le lettere maiuscole e infine le minuscole.
<?php
$string1 = "PHP";
$string2 = "cPanel";
$string3 = "404";
echo strcmp($string1, $string2)."\n"; // stampa -1 perché il carattere "P" viene prima di "c"
echo strcmp($string1, $string3)."\n"; // stampa 1 perché "P" viene dopo il "4"
echo strcmp($string3, $string2)."\n"; // stampa -1 perché il "4" viene prima di "c"
Quando un sito web riceve dati proveniente da un modulo contatti, può capitare che l'utente aggiunga inavvertitamente degli spazi iniziali o finali andando a "sporcare" i dati che verranno salvati in un database.
PHP ci viene in aiuto con tre funzioni per pulire le stringhe da eventuali spazi:
ltrim()
rimuove gli spazi all'inizio di una stringa.rtrim()
rimuove gli spazi alla fine di una stringa.trim()
rimuove gli spazi all'inizio e alla fine.Vediamo un esempio per ciascuna delle tre funzioni
<?php
$name = " Mario";
$surname = "Rossi ";
$fullname = " Mario Rossi ";
echo ltrim($name)."\n"; // Mario
echo rtrim($surname)."\n"; // Rossi
echo trim($fullname)."\n"; // Mario Rossi
Nota: è consigliabile utilizzare sempre trim()
, poiché se la stringa proviene da un input utente, non possiamo sapere se gli spazi siano all'inizio o alla fine.
Capita spesso di voler verificare se una stringa contiene una specifica parola. In questi casi PHP mette a disposizione la funzione strpos()
che restituisce la posizione della prima occorrenza della parola cercata, altrimenti false
.
Vediamo la sua sintassi
strpos($string, $find, $offset)
dove:
$string
è la stringa su cui effettuare la ricerca$find
è la parola da ricercare$offset
è opzionale e indica la posizione da cui si vuole iniziare la ricerca.<?php
$string = "Programmatore PHP freelance";
var_dump(strpos($string, 'PHP')); // int(14)
var_dump(strpos($string, 'HTML')); // bool(false)
Nota: la funzione strpos()
può anche restituire il valore 0
se la parola cercata viene trovata all'inizio della stringa. Lo 0
è interpretato da PHP come false
, dunque nella condizione per verificare la presenza della parola nella stringa è necessario utilizzare l'operatore di confronto ===
, poiché oltre al valore, confronta anche il tipo di dato.
Il seguente esempio chiarisce meglio quanto appena detto
<?php
$find = "Buongiorno";
$string = "Buongiorno mondo";
if (strpos($string, $find) != false) { // Il confronto 0 != false è uguale a false
echo "Trovato";
}
if (strpos($string, $find) !== false) { // Il confronto eseguito tramite !== restituisce il risultato corretto.
echo "Trovato";
}
Il primo if
viene interpretato false
perché PHP converte il valore intero 0
in false
, dunque la condizione risulta false
.
Nel confronto dei tipi del secondo if
, 0
come intero risulta essere diverso da false
booleano, quindi la condizione risulta vera e viene correttamente stampato "Trovato"
.
La controparte multibyte di strpos()
è mb_strpos()
.
La funzione substr()
consente di estrarre una porzione di stringa, partendo da una specifica posizione.
Sintassi di substr()
substr($string, $start, $lenght);
dove:
$string
è la stringa iniziale$start
è la posizione da cui partire per estrarre la sottostringa. Un valore negativo indica che bisogna partire dalla fine della stringa.$lenght
è opzionale e indica quanti caratteri bisogna estrarre partendo da $start
. Un valore negativo esclude $lenght
caratteri a partire dalla fine.Vediamo un esempio per questa funzione
<?php
$str = "Hello World";
echo substr($str, 0, 5); // Hello
echo substr($str, 5, 6); // World
echo substr($str, -6); // World
La controparte multibyte di substr()
è mb_substr()
.
Le funzioni strtoupper()
e strtolower()
convertono i caratteri di una data stringa rispettivamente in maiuscolo e minuscolo.
In particolare, strtolower()
torna utile per uniformare dati provenienti da un modulo contatti. Un caso abbastanza comune è un sito web che raccoglie le email degli utenti registrati, non è insolito infatti trovare alcuni indirizzi in maiscuolo e altri in minuscolo.
Di seguito un esempio di codice per entrambe le funzioni
<?php
$name = "Mario";
$email = "MARIO.ROSSI@GMAIL.com";
echo strtoupper($name)."\n"; // MARIO
echo strtolower($email)."\n"; // mario.rossi@gmail.com
Se vogliamo convertire solamente il primo carattere di una stringa in maiuscolo oppure in minuscolo, possiamo utilizzare rispettivamente le funzioni PHP ucfirst()
e lcfirst()
.
In particolare, ucfirst()
usato in combinazione con strtolower()
si rivela utile per "aggiustare" nomi e cognomi prelevati da un modulo registrazione utente, prima della memorizzazione in un database.
Qui vediamo un esempio di utilizzo su variabili
<?php
$name = "MARIO";
$surname = "ROSSI";
echo ucfirst(strtolower($name))."\n"; // Mario
echo ucfirst(strtolower($surname))."\n"; // Rossi
Per sostituire tutte le occorrenze di una specifica stringa all'interno di un'altra stringa, possiamo utilizzare la funzione str_replace()
.
La sua sintassi è la seguente
str_replace($search, $replace, $subject, $count)
dove
$search
è il valore da sostituire all'interno della stringa. Può essere un array.$replace
è il nuovo valore che sostituirà il vecchio. Può essere un array.$subject
è la stringa di partenza$count
è opzionale e contiene il numero di occorrenze sostituite.Un esempio di utilizzo di str_replace()
è il seguente
<?php
$menu = '<ul><li><a href="/">Home</a></li><li><a href="/about">About</a></li><li><a href="/contatti">Contatti</a></li></ul>';
$output = str_replace('<li>', '<li class="strong-text">', $menu, $count);
echo $count; // 3
Al termine del programma, l'argomento $count
passato alla funzione str_replace()
conterrà il valore 3
, ossia il numero di sostituzioni effettuate.
Un'ulteriore funzione utilizzata spesso con le stringhe è la funzione explode()
, che suddivide una stringa in più parti in base ad un carattere separatore e li inserisce dentro un array.
Sintassi di explode()
explode($delimiter, $string, $limit);
dove
$delimiter
è il carattere separatore.$string
è la stringa di input.$limit
è opzionale e stabilisce il numero massimo di parti da estrarre.Un esempio di utilizzo
<?php
$string = "PHP;HTML;CSS";
$parts = explode(";", $string);
print_r($parts);
/* Output
Array
(
[0] => "PHP"
[1] => "HTML"
[2] => "CSS"
)
*/
Esiste una funzione PHP che torna utile nel caso dovessimo stampare a video una stringa proveniente da un'area di testo compilata dall'utente.
Infatti se mostriamo nel browser tale stringa, questa verrà stampata su una sola riga anche se l'utente ha digitato degli a capo (tasto Invio).
Possiamo convertire gli a capo in interruzione di riga (tag HTML <br />
) tramite la funzione nl2br()
. Vediamo subito un esempio
<?php
$string = "Questa è una riga di testo\nQuesto testo è su un altra riga";
echo $string."<br>";
echo nl2br($string);
Se eseguiamo il programma precedente tramite l'interprete, il primo echo
stampa correttamente l'a capo in quanto interpreta correttamente la sequenza di escape \n
.
Mentre se visualizziamo il programma con un browser, noteremo che solamente il secondo echo
stampa su righe separate il contenuto della variabile $string
. Questo perché nel linguaggio HTML, per andare a capo viene utilizzato il tag <br />
, dunque abbiamo bisogno della funzione nl2br()
per convertire la sequenza di escape \n
nel corrispondente tag HTML.
In questa guida abbiamo presentato alcune funzioni PHP per manipolare le stringhe. Per una consultazione completa è possibile riferirsi alla documentazione online diponibile all'indirizzo https://www.php.net/manual/en/ref.strings.php.