Guida a PHP: le stringhe

Dopo esserci occupati approfonditamente dei valori numerici in questo post approfondiremo l’uso delle stringhe in PHP: innanzi tutto i valori di tipo stringa sono fondamentalmente semplici sequenze di caratteri racchiuse tra singoli o doppi apici, che possono essere costruite a partire da (variabili con) valori di tipo differente.

<?php
// x, y variabili
$x = 'pippo'; // singoli apici
$y = "pluto"; // doppi apici

$n1 = 12; // intero
$n2 = 25; // intero
echo($n1 . "+" . $n2 . "=" . ($n1 + $n2)); // stampa: 12+25=37
?>

Delimitatori e sequenze di escape

Esiste un sottoinsieme di caratteri che non è possibile inserire direttamente in una stringa: si tratta di caratteri di spaziatura (spazio singolo, tabulazione, a capo, …), o dotati di un significato particolare per PHP.

Sequenze di escape

Per riuscire ad inserire questi caratteri in una stringa, è necessario ricorrere ad una sequenza di escape, che consiste nel far precedere dal simbolo ‘\’ il carattere in questione (come vedremo tra poche righe, ad esempio, per inserire il carattere ‘\’ all’interno di una stringa senza che questo venga trattato come delimitatore finale occorre ricorrere alla sequenza di escape, scrivendo ‘\\’):

  • caratteri di spaziatura: tabulazione (\t), ritorno a capo (\r), …;
  • apici: è necessario ricorrere alla sequenza di escape per tutte le occorrenze del delimitatore all’interno della stringa (il carattere di singolo apice in una stringa racchiusa tra doppi apici non richiede sequenza di escape, e viceversa)

Delimitatori: distinzione tra singoli e doppi apici

Nell’interpretazione da parte di PHP di questi caratteri diventa evidente la differenza tra singoli o doppi apici come delimitatori:

  • singoli apici: la stringa viene trattata letteralmente (ossia come sequenza di singoli caratteri) e il risultato dell’operazione di stampa è l’identica sequenza di caratteri (ad eccezione del carattere di singolo apice, che va indicato con la sequenza di escape ‘\\’);
  • doppi apici: PHP interpreta ed espande le seguenti sequenze di stringhe
    • sequenze di escape: sostiuisce la sequenza di escape con il carattere corrispondente;
    • variabili: sostituisce il nome della variabile con il rispettivo valore;

Vediamo qualche esempio, che dimostra come la scelta dei delimitatori non dovrebbe essere casuale (abbiamo visto come uno non valga l’altro), ma valutata caso per caso in relazione al risultato che si vuole ottenere:

<?php
// Sequenza di escape
echo "pippo\tpluto"; // stampa: pippo    pluto
echo 'pippo\tpluto'; // stampa: pippo\tpluto

// Delimitatori nella stringa
echo "pippo"pluto"; // errore di parsing
echo 'pippo"pluto'; // stampa: pippo"pluto

// Variabili
$x = 25;
echo "x=$x"; // stampa: x=25
echo 'x=$x'; // stampa: x=$x
?>

Manipolazione delle stringhe

PHP mette a disposizione alcuni operatori e funzioni per manipolare valori e variabili di tipo stringa; tra i più utili e/o interessanti citiamo;

  • l’operatore di concatenazione ‘.’;
  • la funzione di stampa echo: può essere usata senza parentesi se si vuole stampare una singola variabile o una costante di tipo stringa (la parentesi è invece richiesta se volete passare ad echo la concatenazione di due o più stringhe);
  • la funzione strlen($stringa): restituisce la lunghezza di una stringa;
  • la funzione trim($stringa): rimuove gli spazi all’inizio e alla fine della stringa (la funzione non modifica la stringa passata ma ne restituisce una copia modificata);
  • la funzione explode($delimitatore, $stringa): spezza la stringa in corrispondenza di ciascuna occorrenza del delimitatore e restituisce un’array contenente ciascun frammento ottenuto (la funzione non modifica la stringa passata).
<?php
// Concatenazione
$nome = 'John';
$cognome = 'Reese';
$stringa = $nome . ' ' . $cognome;

// Stampa
echo($nome . ' ' . $cognome); // richiede le parentesi - stampa: John Reese
echo $stringa; // stampa: John Reese

// Altro
$lista = explode(' ',$stringa); // $lista = {'John', 'Reese'}
?>

Codifica e visualizzazione dei caratteri

Ciascun carattere viene rappresentato all’interno di un calcolatore mediante un codice numerico: la codifica rappresenta una sorta di tabella di conversione, che associa a ciascun valore numerico il carattere corrispondente (e viceversa); ciascuna codifica rappresenta spesso un differente alfabeto di caratteri (inglese, italiano, tedesco, giapponese, …), ciascuno contraddistinto da un un (sotto)insieme specifico di simboli, magari assenti negli altri alfabeti (basi pensare alle lettere accentate della lingua italiana).
Una spiacevole conseguenza derivante dalla presenza di molteplici codifiche è che, a parità di valore numerico, a codifiche differenti corrispondano caratteri diversi (ossia lo stesso valore numerico viene interpretato in alfabeti differenti con un carattere diverso) o addirittura ignoti: questo si traduce in un problema di visualizzazione comune in presenza di errori a livello di codifica dei caratteri, per cui alcuni di questi (solitamente quelli specifici di un certo alfabeto) non vengono visualizzati correttamente.
Sebbene questo possa sembrare un problema marginale, in realtà diventa cruciale nell’ambito del web: se i contenuti testuali del nostro sito adottano una codifica specifica per una certa lingua, i visitatori “stranieri”, che adottano una codifica differente, potrebbero non riuscire a visualizzare correttamente i nostri contenuti; di conseguenza, rischieremmo di perdere una preziosa fetta di visitatori.
Per ovviare a questo spiacevole inconveniente è sufficiente utilizzare la codifica dei caratteri UTF-8, concepita per rappresentare in maniera uniforme la maggior parte dei caratteri: perché tutto funzioni a dovere, è necessario che ogni anello della catena attraverso la quale passano le informazioni (ad esempio, il database, l’interprete PHP e la pagina HTML) usi la mesedima codifica).

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...