+ Rispondi alla Discussione
Risultati da 1 a 14 di 14

Togliere gli spazi bianchi intermedi: possibile?

Ultimo Messaggio di Redart il:
  1. #1
    User
    Data Registrazione
    Sep 2006
    Messaggi
    19

    Togliere gli spazi bianchi intermedi: possibile?

    Ho un problema che si verifica quando il form viene compliato una seconda volta e in uno dei campi si inseriscono le stesse parole ma staccate da un numero diverso di spazi bianchi intermedi.

    Per evitare che il form sia compilato due volte con stessi dati, prima di inserire un nuovo record nella tabella si esegue un controllo.

    Faccio una verifica se il valore introdotto nel campo gi presente nel database. Se gi inserito, rimando a pagina di errore. Se non presente si inserisce un nuovo record.

    PROBLEMA
    Quando si complia il campo di un form e con la barra spaziatrice si inseriscono tra le parole 2 o pi spazi bianchi, il valore del campo risulta diverso, e di conseguenza si aggiunge un nuovo record nella tabella, cosa che non dovrebbe accadere....

    Faccio un esempio pratico, se nel campo si inseriscono i valori:

    Pizzeria Bellavista (separate da 1 spazio bianco)
    Pizzeria Bellavista (separate da 2 spazi bianchi)
    Pizzeria Bellavista (separate da 3 spazi bianchi)
    Pizzeria Bellavista (separate da 4 spazi bianchi)

    questi sono considerati diversi e vengono aggiunti nella tabella
    io vorrei che fossero considerati tutti uguali e non diversi e lo spazio bianco interno fosse ridotto ad 1 solo

    Per prevenire simili errori in fase di data entry si soliti usare le funzioni ltrim e rtrim ma queste eliminano solo gli spazi bianchi all'inizio ed alla fine

    Mi chiedevo se esiste una funzione analoga che riduce gli spazi bianchi intermedi ad 1 solo spazio togliendo tutti quelli superflui

    Esiste?

    Un saluto

  2. #2
    User
    Data Registrazione
    Mar 2006
    Messaggi
    130
    Non mi ricordo e non posso provare ora, ma credo che puoi risolvere facendo:

    $testo_pulito = implode(" ", explode(" ",$testo_da_pulire));

  3. #3
    User
    Data Registrazione
    Sep 2006
    Messaggi
    19
    Citazione Originariamente Scritto da CZero
    Non mi ricordo e non posso provare ora, ma credo che puoi risolvere facendo:

    $testo_pulito = implode(" ", explode(" ",$testo_da_pulire));
    Ciao e grazie per la risposta,

    No... purtroppo non va

    il valore del campo lo ripulisco in questo modo prima del confronto:

    $nome = ltrim(rtrim(strip_tags($_POST['nome'])));

    dietro tuo consiglio ho poi messo

    $nome_pulito = implode(" ", explode(" ",$nome));

    ma il risultato non cambia.... gli spazi bianchi intermedi restituiscono sempre valori diversi e non confrontabili

    Qualcuno si trovato in questa situazione e sa come fare?

  4. #4
    User Attivo
    Data Registrazione
    Nov 2004
    Localit
    Catania
    Messaggi
    1,153
    Citazione Originariamente Scritto da Redart
    Ciao e grazie per la risposta,

    No... purtroppo non va

    il valore del campo lo ripulisco in questo modo prima del confronto:

    $nome = ltrim(rtrim(strip_tags($_POST['nome'])));

    dietro tuo consiglio ho poi messo

    $nome_pulito = implode(" ", explode(" ",$nome));

    ma il risultato non cambia.... gli spazi bianchi intermedi restituiscono sempre valori diversi e non confrontabili

    Qualcuno si trovato in questa situazione e sa come fare?
    Puoi risolvere con le espressioni regolari.

    $testo_parsato = preg_replace("\040{2,}", "\040", $testo_da_parsare);

    Dovrebbe andare, non ho testato niente :P

  5. #5
    Esperto L'avatar di piccolo socrate
    Data Registrazione
    Sep 2006
    Localit
    Roma, che domande!
    Messaggi
    509
    io ho fatto cos:
    Codice:
    $testo=str_replace('  ',' ',$testo_da_parserare);

  6. #6
    User Attivo
    Data Registrazione
    Nov 2004
    Localit
    Catania
    Messaggi
    1,153
    Citazione Originariamente Scritto da piccolosocrate
    io ho fatto cos:
    Codice:
    $testo=str_replace('  ',' ',$testo_da_parserare);
    Questo non va perch tu a priori non sai quanti spazi bianchi ci sono...

  7. #7
    User
    Data Registrazione
    Sep 2006
    Messaggi
    19

    Cercasi soluzione disperatamente....

    Ciao,

    e grazie per l'interessamento a quelli che hanno postato (PaTeR, CZero, piccolosocrate)

    purtroppo i suggerimenti non hanno dato frutti

    quello di piccolosocrate funziona benissimo
    ma serve a sostituire solo il doppio spazio con uno solo


    non s se c' un modo per rendere la funzione pi generale
    per spazi >= a 2

    ho provato a modificarla con

    str_replace('\040{2,}','\040',$testo_da_parsare);


    ma nulla di nulla, non funziona


    che dite, si pu modificare???


    il codice complicatissimo di PaTeR in teoria dovrebbe andare ma
    anche questo non funziona


    se ho capito bene la funzione preg_replace
    esegue una ricerca ed una sostituzione con le espressioni regolari


    preg_replace (espressione_regolare, sostituto, testo)

    La funzione ricerca in testo i criteri impostati in espressione_regolare.
    e li sostituisce con sostituto.

    \040
    modo per indicare uno spazio

    {2,}
    dovrebbe significare
    che quanto scritto prima si ripete da 2 volte ad infinito

    quindi, il tutto dovrebbe significare cerca all'interno di $testo_da_parsare gli spazi bianchi ripetuti 2 o pi volte e sostituiscili con 1 solo spazio bianco

    purtoppo non va :-(

    ho fatto dei tentativi e ho provato anche a sostituire \040 con \40
    in quanto avevo letto che sono equivalenti.... ma nulla cambiato

    ho provato anche a sostituire i doppi apici " " con quelli singoli ' '
    dopo aver visto il suggerimento di piccolosocrate,
    ma mi rida l'errore


    qualcun'altro ha suggerimenti?



    Un saluto

  8. #8
    User Attivo
    Data Registrazione
    Nov 2004
    Localit
    Catania
    Messaggi
    1,153
    Scusa, come al solito ho dimenticato i delimitatori... Li dimentico sempre :P

    modifica cos il codice:

    $b = preg_replace('#\040{2,}#', '\040', $a);

    $a il tuo testo. $b il testo risultante.

  9. #9
    User
    Data Registrazione
    Sep 2006
    Messaggi
    19
    Citazione Originariamente Scritto da PaTeR
    Scusa, come al solito ho dimenticato i delimitatori... Li dimentico sempre :P

    modifica cos il codice:

    $b = preg_replace('#\040{2,}#', '\040', $a);

    $a il tuo testo. $b il testo risultante.
    Niente scuse PaTeR.........
    solo grazie per la disponibilit ;-)

    mi spiace deluderti ma purtroppo non v
    sono stato attento a copiarlo per bene ma proprio non funziona

    $nome_pulito = preg_replace('#\040{2,}#', '\040', $nome);

    la soluzione pi ardua di quanto pensassi

    Ciao

  10. #10
    User Attivo
    Data Registrazione
    Nov 2004
    Localit
    Catania
    Messaggi
    1,153
    Citazione Originariamente Scritto da Redart
    Niente scuse PaTeR.........
    solo grazie per la disponibilit ;-)

    mi spiace deluderti ma purtroppo non v
    sono stato attento a copiarlo per bene ma proprio non funziona

    $nome_pulito = preg_replace('#\040{2,}#', '\040', $nome);

    la soluzione pi ardua di quanto pensassi

    Ciao
    A me funziona... guarda qui ( ho levato il secondo \040 per mettere uno spazio) :
    http://phoenixdivision.byethost16.com/aaa.php

    Naturalmente non si nota niente dal browser, devi vedere il sorgente della pagina.

  11. #11
    Esperto L'avatar di piccolo socrate
    Data Registrazione
    Sep 2006
    Localit
    Roma, che domande!
    Messaggi
    509
    allora senza impelagarti in script atroci con tre righe risolvi il problema....

    $testo=str_replace(' ',' ',$testo_da_parserare);
    $testo=str_replace(' ',' ',$testo);
    $testo=str_replace(' ',' ',$testo);

  12. #12
    User Attivo
    Data Registrazione
    Nov 2004
    Localit
    Catania
    Messaggi
    1,153
    Citazione Originariamente Scritto da piccolosocrate
    allora senza impelagarti in script atroci con tre righe risolvi il problema....

    $testo=str_replace(' ',' ',$testo_da_parserare);
    $testo=str_replace(' ',' ',$testo);
    $testo=str_replace(' ',' ',$testo);
    Non script atroce quello che ho fatto... script funzionante. Questo un p di codice in extremis, ma se funziona... tanto bene per lui...

  13. #13
    User Attivo L'avatar di massy
    Data Registrazione
    Mar 2006
    Localit
    Pico
    Messaggi
    1,020
    $testo=str_replace(' ',' ',$testo_da_parserare);
    $testo=str_replace(' ',' ',$testo);
    $testo=str_replace(' ',' ',$testo);
    Dai. E' osceno. E se gli spazi sono 8?

    Quoto pater ed aggiungo che potresti crearti una funziona apposta e passargli i valori.

    Una cosa del tipo:

    function rimuovispazi($testo,$trim=true) {
    $testo=preg_replace("#\s{2,}#", " ", $testo);
    return $testo=($trim)?trim($testo):$testo;
    }

    che chiamerai con:
    $text=rimuovispazi($vecchiotesto); se vuoi anche togliere gli spazi ad inizio e fine riga o
    $text=rimuovispazi($vecchiotesto,false); se non vuoi


  14. #14
    User
    Data Registrazione
    Sep 2006
    Messaggi
    19

    Grazie a tutti per le risposte - problema risolto

    Ciao,

    ho risolto con il codice di PaTeR (grazie ;-)

    $nome_pulito = preg_replace('#\040{2,}#', ' ', $nome);

    bastato cancellare il secondo \040 ed inserire uno spazio vuoto tutto ha funzionato

    grazie mille

    Buona giornata

+ Rispondi alla Discussione

Tag per Questa Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] Attivato
  • Il codice [VIDEO] Attivato
  • Il codice HTML Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.