Funzioni per gestire stringhe

Funzioni PHP per gestire le stringhe

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.

Calcolare la lunghezza di una stringa

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 se fosse un array di caratteri, ciascuno dei quali occupa un byte.

Alla riga 6, il calcolo della lunghezza con strlen() conteggia 21 caratteri, 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.

Confrontare stringhe

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:

  • minore di 0 se la prima stringa è minore della seconda.
  • maggiore di 0 se la prima stringa è maggiore della seconda.
  • uguale a 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"

Rimuovere spazi bianchi

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 nel 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 le tre le 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.

Cercare una parola all'interno di una stringa

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 if0 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().

Estrarre parte di una stringa

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().

Convertire i caratteri in maiuscolo o minuscolo

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 vediamo 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

Convertire il primo carattere in maiuscolo o minuscolo

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

Sostituire le occorrenze di una stringa

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.

Suddividere una stringa

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.

Vediamo un esempio di utilizzo

<?php
$string = "PHP;HTML;CSS";
$parts = explode(";", $string);

print_r($parts);

/* Output
Array
(
    [0] => "PHP"
    [1] => "HTML"
    [2] => "CSS"
)
*/

Convertire gli a capo in interruzioni di riga

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.

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é in 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.

Conclusioni

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.

Guida successiva: Variabili superglobali