Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [stringa] eliminare gli "a capo" di troppo

    Ciao a tutti,

    Ho una textarea (testo0) del form di un guestbook che passa i dati inseriti ad una pagina che li controlla e formatta, prima del vero invio al DB MySql.
    Col seguente codice riesco a fare 3 cose: eliminare \ prima degli apostrofi (stripslashes), spezzare le parole più lunghe di 20 caratteri (wordwrap) e convertire i \n in
    (nl2br):
    Codice PHP:
    $testo stripslashes(wordwrap(nl2br($testo0), 20" ",1)); 
    Come faccio ad eliminare gli "a capo" di troppo? nel senso che se uno preme centinaia di volte il tasto INVIO, la stringa di testo conterrà centinaia di
    .
    Io vorrei accettarne al massimo 2 consecutivi.

    Grazie per l'attenzione

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    aggiungi, prima della tua $testo = ...

    anche:

    codice:
    $testo = preg_replace("/\n{3,}/", "\n\n", $testo);
    Tutto quello che è da 3 new-line in più è convertito in 2 new-line. Certo è una versione molto molto semplificata, visto che se uno fa new-line, blank, new-line, blank etc etc quell'espressione regolare non basta più
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Originariamente inviato da Andrea1979
    aggiungi
    Grazie Andrea!

  4. #4
    Allora, non capisco cosa c'è che non va. Se provo il codice con preg_replace di cui sopra di Andrea su una stringa di prova tipo
    Codice PHP:
    $testo "la mia macchina \n\n\n\n\n\n\n\n\n\n è nera; 
    funziona perfettamente, facendo la sostituzione dei \n superiori a 2 in \n\n (2 soli).
    Invece se l'applico alla stringa di testo proveniente dalla textarea, non avviene niente, come se non contenesse nessun \n
    Ma in realtà con nl2br i
    vengono restituiti...

    Aggiunta:
    Forse il motivo è che mentre nella stringa di prova \n\n\n sono uno si seguito all'altro, nella stringa dalla textarea sono invece
    \n
    \n
    \n...

  5. #5
    Risolto, nel senso che ho trovato la soluzione, ma non mi si chieda il significato del codice...
    Codice PHP:
    $testo_mondato preg_replace("/\n[^\w]*\n/""\n\n"$testo0); 

  6. #6
    Bisogna tenere conto oltre che del new line anche dei carriage return (in windows), così dovrebbe funzionare:

    Codice PHP:
    $testo0=preg_replace('/((\r)?\n){3,}/'"\n\n"$testo0); 
    dA .. foto di viaggio
    L'esperienza è il tipo di insegnante più difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  7. #7
    Originariamente inviato da Anªkin
    così dovrebbe funzionare
    Sì, funziona anche così. Grazie del contributo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.