[PHP] Troncare una stringa senza tagliare una parola
Giovanni
| Argomenti: none | 10128
Per troncare una stringa in php é sufficiente usare la funzione substr mettendo come secondo parametro il valore 0 (per partire dall’inizio) e come terzo parametro il numero di caratteri a cui si vuole troncare la stringa.
Questa semplice funzione PHP che presento, invece, permette di troncare una stringa ad un certo punto senza tagliare le parole.
E’ sufficiente passare la stringa da troncare ed il numero di caratteri. Alla stringa ritornata vengono aggiunto 3 puntini in fondo.
// // FUNZIONE CHE DIVIDE LA STRINGA A TOT CARATTERI SENZA TAGLIARE LE PAROLE // E AGGIUNGENDO IN FONDO (SE CONTINUA) ... // function troncaTesto($testo, $caratteri=50) { if (strlen($testo) <= $caratteri) return $testo; $nuovo = wordwrap($testo, $caratteri, "|"); $nuovotesto=explode("|",$nuovo); return $nuovotesto[0]."..."; }
Esempio di chiamata:
$testo = "Provo a troncare questa stringa senza tagliare in due le parole a posizione 50"; $nuovoTesto = troncaTesto($testo, 50);
Pubblicato in Funzioni e classi PHP e C |
12 Settembre 2006 alle 11:56
Ciao!
La tua funzione è molto compatta e funziona alla meraviglia, ma crea problemi se ci sono caratteri di ritorno a capo.
La funzione non da errore ma restituisce una stringa il cui numero di caratteri è molto inferiore al possibile: non c’è modo di non considerare i “carriage return” ?
12 Settembre 2006 alle 12:14
Io la utilizzo normalmente anche con i CR e funziona correttamente.
Forse tu la utilizzi con degli “a capo” html, con
<br />o<br>.In questo caso effettivamente valgono per i caratteri di cui sono formati (6 o 4 rispettivamente) ma poi vedi solo un “a capo”.
La soluzione è quella di convertire da html a testo puro con la funzione php html_entity_decode() e ripristinarla con htmlentities().
24 Novembre 2008 alle 10:45
ciao a tutti,
ho provato a inserire la funzione all’interno di un ciclo for ma, ovviamente mi restituisce l’errore
<>
come posso ovviare? grazie.
ps= parto da questo codice
<query(”SELECT * FROM TABPROD ORDER BY ID_PRODOTTO LIMIT “.(($_GET['start']-1)*30).”, 30;”);
for($c = 0; $result = mysql_fetch_array($mysqlc->result, MYSQL_ASSOC); $c++){
24 Novembre 2008 alle 10:46
OK NON HO SCRITTO IL TIPO DI ERRORE CHE è
Fatal error: Cannot redeclare troncatesto() (previously declared in …
24 Novembre 2008 alle 18:48
La funzione va definita prima del ciclo, mentre all’interno del ciclo va solo richiamata.
28 Aprile 2009 alle 16:47
Se interessa al link che segue
http://web2.otto.to.it/abidibo/index.php?evtblog-viewList&id=28
viene ben spiegata una funzione completa per il troncamento di stringhe che contengano anche tag html al suo interno.
Se puo interessare ;)