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

    Non mostrare spazi tra le righe di un post

    Devo scrivere un codice che trasformi il testo di un post di un forum da così:

    ciao a tutti

    vi volevo dire che

    torno la settimana prossima

    a:

    ciao a tutti
    vi volevo dire che
    torno la settimana prossima

    In pratica non deve togliere tutt i ritorni a capo, ma togliere i ritorni a capo solo se intervallati da testo spazio testo spazio testo

  2. #2
    Beh.... un po' più codice non avrebbe fatto male per dare una risposta.

    Ad ogni modo, ho la sensazione che ci sia un doppio nl2br(): uno nell'inserimento del testo nel DB, uno nell'estrapolazione.

    Vedi un po' se ho ragione io?
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  3. #3
    Per non complicare le cose mi basterebbe che la "modifica" del testo avvenisse anche solamente in fase di visualizzazione e non necessariamente anche nell'inserimento

  4. #4
    Vi chiedo questo perchè vedo che molta gente sui forum spesso per scrivere semplici frasi usa mille spazi, rendendo il post iper antiestetico (almeno a mio avviso)

  5. #5

    Re: Non mostrare spazi tra le righe di un post

    Originariamente inviato da Ajeje Brazof
    Devo scrivere un codice che trasformi il testo di un post di un forum da così:

    ciao a tutti

    vi volevo dire che

    torno la settimana prossima

    a:

    ciao a tutti
    vi volevo dire che
    torno la settimana prossima

    In pratica non deve togliere tutt i ritorni a capo, ma togliere i ritorni a capo solo se intervallati da testo spazio testo spazio testo
    Prova così:

    Codice PHP:
    $string "ciao a tutti

    vi volevo dire che

    torno la settimana prossima."
    ;

    // questo ti conviene farlo prima di inserire il messaggio nel db:
    while (stristr($string"\n\n") !== false) {
       
    str_replace("\n\n""\n");
    }
    // questo lo farai quando stampi il messaggio ripescato dal db:
    echo nl2br($string); 
    Considerando la versione di PHP <= 4.3.x (altrimenti stristr() non sarebbe nativa e l'operatore !== non funzionerebbe) e che tu sia su piattaforma Linux (altrimenti per gli "a capo" Windows utilizza carriage returns + newline, cioè "\r\n"; in tal caso il controllo nel wihle e il replace andrebbero modificati).
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  6. #6
    Però così facendo elimina qualsiasi spazio... io invece vorrei che li tolga solo se c'è

    testo
    spazio
    testo
    spazio
    testo

    mentre se c'è

    Ciao mi chiamo Andrea

    Come stai?
    Tutto bene?
    Pure io

    rimanga invariato

    Comunque server apache con php 5.0.4

  7. #7
    Originariamente inviato da Ajeje Brazof
    Però così facendo elimina qualsiasi spazio... io invece vorrei che li tolga solo se c'è

    testo
    spazio
    testo
    spazio
    testo

    mentre se c'è

    Ciao mi chiamo Andrea

    Come stai?
    Tutto bene?
    Pure io

    rimanga invariato

    Comunque server apache con php 5.0.4
    Ma hai provato?
    Quel while sostituisce solo gli a capo doppi, non quelli singoli. Attenzione quando parli di spazi, quelli non sono spazi ma "a capo", non puoi permetterti questo errore. E' normale che lo faccia un utente ma non un webmaster, se vuoi esserlo.
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  8. #8
    Si effettivamente
    Comunque come ti dicevo nel tuo codice non vedo controlli di presenza testo tra i vari ritorni a capo, ti spiego meglio:

    ciao come va?

    ciao come va?

    ciao come va?

    ciao come va?

    deve diventare

    ciao come va?
    ciao come va?
    ciao come va?
    ciao come va?

    mentre

    ciao come va?

    ciao come va?
    Tutto bene? allora?

    Ciao come va?

    va lasciato invariato, altrimenti non si potranno più usare i doppi ritorni a capo che a volte sono utili

  9. #9
    non c'è differenza tra il primo esempio ed il secondo ...
    1 - il testo o gli spazi se posti così com'è in (x)HTML diventano un singolo spazio senza far niente
    2 - se vuoi eliminare gli spazi usi preg_replace('/[ ]+/', ' ', trim($testo)) e tra le parole avrai massimo uno spazio (più ritorni a capo)
    3 - non c'è modo di capire se hai scelto di andare a capo e se la frase dopo deve essere due a capo dopo oppure uno solo a meno che non hai un software con vocabolario dietro capace di analizzare l'intenzione dell'interlocutore ... fantascienza, lascia perdere, nessun forum fa questo e se lo fa lo fa male a discapito delle prestazioni del server .... elimini spazi superflui e scegli se lasciare gli a capo multipli o normalizzarli tutti a massimo 1 con preg_replace("/[\n\r]+/", '
    ', $testo);
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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.