Spesso per problemi di spazio, si vorrebbe limitare il testo che compare in uno specifico div, testo recuperato da un database magari. Php ha un’ apposita funzione substr() che provvede a tagliare una stringa, una volta superata una lunghezza prefissata.
Facciamo un esempio per capire meglio come utilizzarla e in modo che tutto sia più chiaro.
Ammettiamo che io abbia una stringa del tipo:
1 $stringa= "Oggi è il mio compleanno. E' vero!"
Ma ho poco spazio per tutto questo testo, vorrei quindi che venissero visualizzati soltanto i primi 20 caratteri.
La funzione substr() ha tre parametri:
Quindi per visualizzare i primi 20 caratteri della mia stringa partendo dal primo possiamo scrivere:
1 $stringa_da_visualizzare = substr($stringa, 0, 20);
Purtroppo questa funzione lavora sui caratteri, quindi non riconosce le parole e quando finisce di contare i caratteri da visualizzare, se la parola non è completa, la tronca.
La soluzione non è molto complicata, possiamo creare una nuova funzione che evita lo spiacevole inconveniente.
01 02 function substrwords($text,$maxchar,$end='...'){03 if(strlen($text)>$maxchar){04 $words=explode(" ",$text);05 $output = '';06 $i=0;07 while(1){08 $length = (strlen($output)+strlen($words[$i]));09 if($length>$maxchar){10 break;11 }else{12 $output = $output." ".$words[$i];13 ++$i;14 };15 };16 }else{17 $output = $text;18 }19 return $output.$end;20 }
Questa funzione non fa altro che suddividere il testo in parole e contare i caratteri delle singole parole. Quando il numero dei caratteri da visualizzare viene superato, se la parola in cui si sta contando non è terminata allora la funzione la esclude dalla visualizzazione.
La funzione può essere richiamata in questo modo:
1 echo substrwords($string,20);
e stamperà “Oggi è il mio compleanno…”
Popularity: 1% [?]
Altri articoli interessanti:
28 October, 2009 at 11:15 am
Ciao, sto imparando ora i rudimenti del php e questa funzione è esattamente quello che stavo cercando!
Un’unico problema: i puntini vengono messi alla fine di ogni stringa, indipendentemente dal fatto che sia stata “tagliata” o meno..
Sto cercando di correggerla, ma sono ancora in alto mare eheh
Grazie
Davide
28 October, 2009 at 11:22 am
@Zave – Ok, penso di esserci riuscito
function substrwords($text,$maxchar,$end='...'){
if(strlen($text)>$maxchar){
$words=explode(" ",$text);
$output = '';
$i=0;
while(1){
$length = (strlen($output)+strlen($words[$i]));
if($length>$maxchar){
break;
}else{
$output = $output." ".$words[$i];
++$i;
};
};
}else{
$end='';
$output = $text;
}
return $output.$end;
}