Crea sito

Pillole di PHP – Come andare a capo in un testo ogni massimo tot caratteri

| 14 marzo 2013 | 0 Comments

PHP LogoMettiamo il caso di avere un testo lungo e di sapere che ogni massimo tot caratteri (per esempio mettiamo 30), il testo debba andare a capo. La funzione PHP che fa a caso nostro è wordwrap(). Il suo funzionamento è semplice, per realizzare l’esempio prenderò in prestito una frase di Ghandi:

<!--?php <br ?-->// Creiamo una variabile con dentro la frase che vogliamo
// spezzettare in tronconi di parole che rispettino la
// lunghezza massima per riga 30 caratteri

$str = 'Acquistiamo il diritto di criticare severamente una persona solo quando riusciamo a convincerla del nostro affetto e della lealtà del nostro giudizio, e quando siamo sicuri di non rimanere irritati se il nostro giudizio non viene accettato o rispettato.';

// Tramite l'echo mostriamo l'output della funzione
// wordwrap(). Come primo parametro si deve mettere la
// stringa da spezzettare, come secondo la lunghezza
// massima per riga e come terzo (opzionale) la stringa
// che vogliamo aggiungere alla fine della riga (nel
// caso dell'esempio il '\n' che non è altro che un
// 'vai a capo' in linguaggio html

echo wordwrap($str,30,"\n");
?>

L’output sarà il seguente:

Acquistiamo il diritto di
criticare severamente una
persona solo quando riusciamo
a convincerla del nostro
affetto e della lealtà del
nostro giudizio, e quando
siamo sicuri di non rimanere
irritati se il nostro giudizio
non viene accettato o
rispettato.

Non so se ve lo sarete già chiesto ma esiste un problema che potrebbe risultare molto scomodo in un determinato caso specifico. Quale? E se una parola del nostro testo fosse più lunga della lunghezza massima per riga da noi impostata?
Nell’esempio precedente la funzione wordwrap(), per come è stata impostata, la avrebbe scritta tutta su una riga sforando il limite massimo ed in quel caso specifico non sarebbe andato a capo. Per ovviare a questo inconveniente, gli ideatori di questa funzione hanno messo un quarto parametro opzionale e settato a false nel caso non sia utilizzato. Per risolvere il problema non dobbiamo fare altro che settarlo a true come nel seguente esempio:

<!--?php <br ?-->
// Creiamo una variabile con dentro la frase che vogliamo
// spezzettare in tronconi di parole che rispettino la
// lunghezza massima per riga 15 caratteri

$str = 'Nella lingua italiana esistono parole davvero lunghe, quali \'internazionalizzazione\' ed \'approvvigionamento\'';

// Utilizziamo come nell'esempio precedente la funzione
// wordwrap(), ma diminuiamo in numero di caratteri per
// riga a 15 e scriviamo come quarto parametro 'true'
// (ovvero attivo)

echo wordwrap($str,15,'\n', true);
?>

L’output sarà il seguente:

Nella lingua
italiana
esistono parole
davvero lunghe,
quali
‘internazionali
zzazione’ ed
‘approviggionam
ento’

Come ultimo punto faccio un esempio pratico su come mettere in un array le varie righe invece di stamparle a video con l’echo tramite la funzione explode():

<?php
// Creiamo una variabile con dentro la frase che vogliamo
// spezzettare in tronconi di parole che rispettino la
// lunghezza massima per riga 30 caratteri

$str = 'Acquistiamo il diritto di criticare severamente una persona solo quando riusciamo a convincerla del nostro affetto e della lealtà del nostro giudizio, e quando siamo sicuri di non rimanere irritati se il nostro giudizio non viene accettato o rispettato.';

// Creiamo un array il cui contenuto è l'output della
// funzione explode() (che serve a dividere in array un
// input di tipo stringa) utilizzando come primo parametro
// il '\n' ('a capo' in stile C e/o PHP) e come secondo la
// funzione wordwrap() come nel primo esempio tranne il
// carattere di finale di stringa '\n'

$array = explode('\n',wordwrap($str, 30, '\n', true));

// Stampiamo a video il contenuto dell'array fra parentesi

var_dump($array);
?>

L’output sarà il seguente:

array(10) {
[0]=>
string(25) “Acquistiamo il diritto di”
[1]=>
string(25) “criticare severamente una”
[2]=>
string(29) “persona solo quando riusciamo”
[3]=>
string(24) “a convincerla del nostro”
[4]=>
string(26) “affetto e della lealtà del”
[5]=>
string(25) “nostro giudizio, e quando”
[6]=>
string(28) “siamo sicuri di non rimanere”
[7]=>
string(30) “irritati se il nostro giudizio”
[8]=>
string(21) “non viene accettato o”
[9]=>
string(11) “rispettato.”
}

N.B. Naturalmente nel caso vi siano già presenti ‘\n’ nella stringa principale (prima dell’utilizzo della funzione wordwrap()) essi verranno utilizzati dall’explode creando nuove righe.

Buon lavoro! 😉

VN:F [1.9.22_1171]
Rating: 4.0/10 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)
Pillole di PHP - Come andare a capo in un testo ogni massimo tot caratteri, 4.0 out of 10 based on 1 rating

Tags: , , , ,

Category: Informatica

About the Author ()

Leave a Reply