Come dividere una stringa molto lunga senza tagliare le parole

Come dividere una stringa molto lunga senza tagliare le parole

Ieri sera ho inserito, nel database citazioni, una citazione molto lunga che finendo tra le random sotto la testata causava un problema grafico non indifferente.

Nelle immagini gd che uso nelle firme nei siti e forum esterni (potete trovarle anche su darkwolf.altervista.org), invece, il problema era stato risolto tagliando semplicemente la stringa al numero di caratteri richiesti, e quindi – purtroppo – tagliando spesso le parole stesse.

Obsoleta:

 $string = mb_substr($string,0,144)." [...]";// taglia anche le parole

Qui, invece, la nuova stringa funzionante e decisamente migliorata!

 <?php $string ="by laltroweb.it: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam non tellus tempus, scelerisque leo vitae, tristique mauris. Ut ligula tellus, dapibus vel rutrum dignissim, mattis ultricies eros. Pellentesque aliquet, dui quis aliquam ultricies, dolor nisl faucibus metus, in bibendum arcu nibh lobortis mauris. Praesent urna eros, hendrerit a tincidunt at, vehicula non ipsum. Nunc eleifend luctus luctus. In vel turpis id sem facilisis vestibulum. Quisque vel vehicula lorem. Phasellus volutpat odio molestie rutrum dignissim. Vivamus nec vulputate massa, in tempus dui. Etiam finibus libero nec mi consequat vulputate.";  if(strlen($string)>150)// Se maggiore di 150 caratteri{   $string = substr($string,0, strrpos(mb_substr($string,0,144),' '))." [...]";} echo '<p>'.$string.'</p>';

Risultato:

 by laltroweb.it: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam non tellus tempus, scelerisque leo vitae, tristique mauris. [...]

Info:

Cita

mb_substr($string, 0, 144), ‘ ‘) = ottieni parte della stringa che va da 0 a 144 (tronca al carattere 144 – multi-byte);
nb: 144 semplicemetne perché i caratteri aggiuntivi ” […]” sono 6, quindi sono andato per sottrazione.
strrpos * = trova la posizione dell’ultima occorrenza di un carattere in una stringa (in questo caso, ” ” [spazio] all’interno dei 144 caratteri)
substr * = quindi tagliamo nuovamente la stringa nella posizione indicata da strrpos.

Probabilmente ci sono modi migliori per svolgere questo compito. Questo metodo, ad esempio, non funzionerebbe se la stringa fosse senza spazi o con spazi composti da &nbsp; quindi è una soluzione potenzialmente imperfetta, ma va sicuramente bene nella maggioranza dei casi 🙂

Spero possa tornarvi utile!

Se avete dubbi, consigli, critiche o suggerimenti, commentate (è gratis e potete farlo anche da visitatori) 😉




Lascia un commento

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.