Newsgroup: it.comp.www.php
Titolo: tagliare una stringa per la formattazione...

Ciao a tutti, ho un problema di visualizzazione in una pagina con PHP:
ho un sistema in cui l'utente attraverso un form aggiunge un messaggio
nel database, la pagina che recupera i campi del DB é una pagina
perfettamente formattata che l'utente potrebbe tranquillamente
sconvolgerne l'equilibrio semplicemente inserendo testo senza spazi, 
Cosa posso usare per far si che PHP riconosca se all'interno di una
determinata stringa (quella che arriva da FORM) c'é una riga che supera
i 60 caratteri senza spazi al suo interno e la tagli sul sesantesimo
carattere?? 
tutto per permettermi di visualizzare correttamente anche se l'utente
inserisce testi del genere..
forse é un po' complicato..
grazie
ciao


ICQ# 11129001
http://www.robocore.com/

Esempio.. un utente inserisce questo testo
"ciao io sono un utente e la prossima riga che inserisco non ha spazi,
quindi ti incasino la pagina eccola supercalifragilistichespiralidoso
supercalifragilistichespiralidososupercalifragilistichespiralidoso"
quando vado a recuperare il testo, la pagina non può da sola tagliare le
righa se queste non hanno spazi all'interno e quindi se metto tutto
dentro una tabella larga 100 pixel il testo la allargherà a suo comodo
ma se invece trovassi il modo di tagliare quelle stringhe che presentano
più di un tot di caratteri (esempio 60) per formattare il testo
correttamente senza che questo mi allarghi la tabella
"ciao io sono un utente e la prossima 
riga che inserisco non ha spazi, 
quindi ti incasino la pagina eccola 
supercalifragilistichespiralidososuper  (TAGLIATA)
califragilistichespiralidososupercalif  (TAGLIATA)
ragilistichespiralidoso"
credo che sia tosto farlo..
mi sbaglio?
grazie
ciao


 mi sbaglio?
mhmm, si e' abbastanza tosto (almeno per me). non sono in grado di 
consigliarti, se non dicendoti di dare un'occhiata al manuale di PHP, 
magari c'e' qualche funzione (o combinazione di esse) che ti puo' aiutare:
http://www.php.net/manual/en/ref.strings.php


 correttamente senza che questo mi allarghi la tabella
 
Bruttino, ma funziona!
<?
$stringa = 'La tua stringa lunghissima ......';
$ary = split(" ", $stringa);
foreach($ary as $input) {
    if (strlen($input < 60)) {
	print $input;
    } else {
	// E qui si lavora d'ascia!
	$input = preg_replace("/(\w{60})/", "\\1 ", $input);
	print $input;
    }
    print " "; // Altrimenti si appiccica tutto! :-)
}
?>
Ciao
--ev

Ciao e grazie per l'enorme aiuto, ma non funziona,  purtroppo non so
nulla di espressioni regolari POSIX e non ho idea di cosa sia..
sembra stampare tutto attraverso la prima condizione dell'IF, se provi
infatti a mettere due volte print $input; (solo nella prima condizione)
ti stampa 2 volte anche le stringhe maggiori di 60 caratteri..
comunque grazie ancora.


>     if (strlen($input < 60)) {
TANA!!! :)
piccolissimo errore di distrazione, capitano a volte...
e' if ( strlen($input) < 60) {
eccetera eccetera
Da quel poco che so di parser e compilatori, non dico che il perl se ne 
sarebbe dovuto uscire con un bel "ma che ca**o stai a scrive", ma cmq 
la condizione cosi' viene valutata in modo un po' singolare... :)))
Salut,
-- 
Mariani "Darkpand" Dario 
dark...@libero.it
IAFo #126       ICQ# 49365960
"L'uomo e' tanto meno se' stesso quanto piu' parla in persona propria:
dategli una maschera e vi dira' la verita'" -- Oscar Wilde

 la condizione cosi' viene valutata in modo un po' singolare... :)))
Mo' provo ...
No, non ci sono errori, compila per benino!
Ma mi chiedo come cavolo la valutino i due parser scritta in quel modo
li! :-)
CIao
--ev

 li! :-)
Uhm... parlando di quella scritta sbagliata... 
viene richiamata la funzione strlen con parametro "$input < 60", non so 
se viene trattato come una stringa...
in quel caso sarebbe comunque un valore maggiore di 0, per cui l'if 
dovrebbe dare valore true, se non ricordo male (0 = false , diverso da 
0 = true).
Hehe, i compilatori/interpreti che usano i numeri per valutare le 
condizioni permettono di fare questi errori... uno dei pochi punti a 
favore del pascal, che ti avrebbe dato una sonora bacchettata sulle 
dita :)))
Interpretatamente,


 li! :-)
Dipende dal parser. Le possibilita` sono due (oltre all'errore):
1- Prende il primo carattere dell'input e valuta il codice ASCII.
L'operazione puo` dare come risultati:
	a- True
	b- False
	c- 1
	d- 0
Nel caso a, strlen potrebbe valere 4, nel b 5, nel c e d 1. In tutti i
casi if sarebbe vero e la condizione soddisfatta.
2- Prende il primo carattere e, se e` una cifra, usa quella, senno mette
0, fa 0<60 che e` vero, strlen torna come lunghezza 1, quindi vero.
In pratica, sempre vero :)
Poi dipende sempre dal parser...
Bye.

 ha scritto nel messaggio
news:1eyjqrp.1f2h883yv4ktyN%thomas...@inwind.it...

Ciao, prova questo, anche se non l'ho provato dovrebbe funzionare ed è molto
più semplice della soluzione che ti hanno proposto.
if ( len($str) >60 ) {
    $str=substr($str,0,60);
}
Ciao ciao
_marley_
www.digitalsoft.it


eheheh,
mi sono accorto solo adesso che anche se più corto in questo modo ti taglia
le parole!
come non scritto  :-)