• Super User

    @Redart said:

    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 😛


  • User Attivo

    io ho fatto così:

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

  • Super User

    @piccolosocrate said:

    io ho fatto così:

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

    Questo non va perchè tu a priori non sai quanti spazi bianchi ci sono...


  • User

    Ciao,

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

    purtroppo i suggerimenti non hanno dato frutti

    [LEFT]quello di piccolosocrate funziona benissimo
    ma serve a sostituire solo il doppio spazio con uno solo[/LEFT]

    [LEFT]non sò se c'è un modo per rendere la funzione più generale
    [LEFT]per spazi >= a 2[/LEFT]

    [LEFT]ho provato a modificarla con[/LEFT]

    [LEFT]str_replace('\040{2,}','\040',$testo_da_parsare);[/LEFT]

    ma nulla di nulla, non funziona

    che dite, si può modificare???

    [/LEFT]

    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


  • Super User

    Scusa, come al solito ho dimenticato i delimitatori... Li dimentico sempre 😛

    modifica così il codice:

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

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


  • User

    @PaTeR said:

    Scusa, come al solito ho dimenticato i delimitatori... Li dimentico sempre 😛

    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 :arrabbiato:

    Ciao


  • Super User

    @Redart said:

    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 :arrabbiato:

    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.


  • User Attivo

    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);


  • Super User

    @piccolosocrate said:

    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...


  • Moderatore

    $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

    :ciauz:


  • User

    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