27
Oct

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:

$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:

  1. La stringa da limitare
  2. Il carattere da cui iniziare il conto
  3. I caratteri da visualizzare

Quindi per visualizzare i primi 20 caratteri della mia stringa partendo dal primo possiamo scrivere:

$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.


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{
$output = $text;
}
return $output.$end;
}

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:

echo substrwords($string,20);

e stamperà “Oggi è il mio compleanno…”

Hey, non hai notato qualcosa di nuovo? Cosa ne pensi della nuova grafica? !

 

2 Responses to “Php Basic: Come limitare la lunghezza del testo”


  1. Zave (2 comments)

    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


  2. Zave (2 comments)

    @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;
    }

E tu cosa ne pensi?