Tutorial Php – Dividere una stringa su righe di 50 caratteri

Stringhe di elastici

Con una semplice funzione possiamo dividere il testo su più righe, senza troncare le parole (1)

Poniamo il caso che abbiate un contenitore (un div, per esempio) la cui lunghezza è pari da richiedere che ogni riga di testo non abbia più di 50 caratteri. All’interno di questo contenitore, però, dovete inserire un testo dinamico (per esempio preso da database) di cui non potete sapere la lunghezza a priori: potrebbe essere una stringa da 10 caratteri o da mille.
Quello che vi occorre, in casi come questo – che non sono per niente rari – è un sistema per suddividere il testo dinamico in “parti” di 50 caratteri, in modo da poterlo disporre su righe diverse senza strabordare dal contenitore.

Lo script che andiamo a vedere oggi fa esattamente questo. Si tratta di una semplice funzione che si compone di tre parametri:
– il testo da stampare su più righe
– il numero di caratteri massimo che deve stare su una riga
– un eventuale elemento separatore con cui suddivideremo, ulteriormente, il testo passato (parametro opzionale)

La funzione è costruita affinché le parole non vengano troncate: se siamo arrivati a quasi 50 caratteri e la successiva parola ne contiene per esempio 10, la parola sarà messa a capo su una nuova riga.
Il carattere separatore dipende dalle vostre esigenze: può essere l’elemento di accapo (
o \n) oppure un qualsiasi altro elemento utile per tenere traccia di dove deve iniziare e finire una riga.

Diamo un’occhiata alla funzione che, come sempre, è commentata.
Lo script è liberamente scaricabile e personalizzabile. I commenti dovrebbero essere più che sufficienti per comprendere il funzionamento del codice.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//- $stringa: stringa da dividere
//- $lenght: lunghezza di ogni stringa
//- $separatore: carattere si separazione base per le stringhe (per default \n); per l'html si può usare <br />
function dividi_testo($stringa, $lenght, $separatore="\n"){

	//se la stringa non è vuota ed è più lunga di $lenght, la divido
	if($stringa!="" and strlen($stringa)>$lenght){

		$stringa2="";
		//la divido in base agli accapo (separatori) già presenti, poi prendo ogni frammento e, se più lungo di $lenght, li divido in pezzi contenenti $lenght caratteri
		$array=explode($separatore, $stringa);

		//prendo ogni pezzo e lo divido in base al totale di caratteri per riga
		foreach($array as $value){

			if(strlen($value)>$lenght){

				$inizio=0;
				while($inizio<strlen($value)){
					//estraggo i primi tot caratteri dall'inizio
					$parte1=substr($value, $inizio, $lenght);

					//controllo nel caso in cui si è all'ultima parte di stringa (altrimenti viene troncata)
					if($inizio>strlen($value)-$lenght){
						$stringa2.=$parte1.$separatore;
						break;	
					}

					//torno al carattere prima dello spazio
					$parte1=substr($parte1, 0, strrpos($parte1, ' '));
					//aggiorno il puntatore per ripartire dalla stringa (il +1 serve per eliminare lo spazio quando va a capo)
					$inizio+=strlen($parte1)+1;
					//salvo la parte tagliata
					$stringa2.=$parte1.$separatore;

				}

			}else
				$stringa2.=$value.$separatore;

		}

		return trim($stringa2, $separatore);

	}else
		return $stringa;

}

Per testare la funzione troverete una stringa di prova piuttosto lunga. La funzione è quindi richiamabile in questo sistema (dove $variabile è il testo da suddividere):

1
echo dividi_testo($variabile, 50, "<br>");
Copyright immagini

(1) http://artclubblog.com/2012/11/19/string-art/

Etichette:,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *