Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    150

    Spazi di troppo nelle stringhe

    Salve,
    se io una stringa e voglio eliminare gli spazi vuoti all'inizio e alla fine, basta usare la funzione trim(). Ma se gli spazi tra le parole che costituiscono una stringa sono più di uno, come si fa a lasciarne solo uno..?

    Se ad esempio ho la stringa:

    Codice PHP:
    $str "Oggi   è     una         brutta giornata"
    come si può fare per trasformarla in:

    Codice PHP:
    $str "Oggi è una brutta giornata"
    ??


    Credo che occorra qualche espressione regolare. Ma su esse non ho alcuna conoscenza

    Grazie in anticipo.

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Puoi usare una regexp ma non solo.

    Codice PHP:
    <?php
    $str0 
    "";
    $str1 "Oggi   è     una         brutta giornata";
    print 
    "Prima : $str1<br/>";
    while (
    $str0 <> $str1) {
        
    $str0 $str1;
        
    $str1 str_replace('  ',' ',$str1);
    }

    print 
    "Dopo : $str1<br/>";
    ?>
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    150
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Puoi usare una regexp ma non solo.

    Codice PHP:
    <?php
    $str0 
    "";
    $str1 "Oggi   è     una         brutta giornata";
    print 
    "Prima : $str1<br/>";
    while (
    $str0 <> $str1) {
        
    $str0 $str1;
        
    $str1 str_replace('  ',' ',$str1);
    }

    print 
    "Dopo : $str1<br/>";
    ?>
    Grazie badaze !! Carino questo algoritmo!! Non l'ho provato ma credo che funzioni (anche se penso che per <> intendevi !=).
    Se mi ci mettevo può darsi che ci arrivavo anche io a farlo....ma volevo sapere se c'è una espressione regolare da utilizzare in merito. Credo sia più elegante o no?

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    != == <>
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Non so se una regexp è più elegante. Comunque.

    Codice PHP:
    <?php
    $pattern 
    "/\s{2,}/";

    $str1 "Oggi   è     una         brutta giornata    del  cavolo";  
    print 
    "Prima : $str1<br/>";
    $str2 preg_replace($pattern,' ',$str1);
    print 
    "Dopo : $str2<br/>";
    ?>
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    150
    Grazie tanto badaze.
    Non mi ero accorto che mi avessi ri-risposto fornendomi anche la soluzione in termini di espressione regolare.

    Ad ogni modo funzionano entrambe le soluzioni.

    Per quanto riguarda l' "eleganza" forse ho usato un termine sbagliato. Sarebbe più proprio usare il termine efficienza nel senso di ottenere un egual risultato con meno istruzioni possibili e meno elaborazioni possibili (in questo caso si evitano un numero X di cicli while velocizzando l'operazione).
    Da ignorante mi viene da pensare così. Se poi sia giusto o sbagliato non lo so..

    Comunque grazie ancora

  7. #7
    secondo me funziona anche solo semplicemente così:
    Codice PHP:
        $str '                                        ciao           dove  vai?  ';  
          
        
        
    $str1 str_replace('  ',' '$str);  
          
         
        echo 
    $str1;  
        
    ?> 
    perché se ci sono 3 spazi, ne toglie uno, però rimangono di nuovo 2 spazi così toglie l'altro, insomma alla fine anceh 10 spazi alla fine li toglie tutti, facendo un ciclo , spero di essermi spiegata
    Ultima modifica di nivasio; 06-11-2014 a 16:14 Motivo: testo nel codice
    Un tardo hegeliano di Busalla / allevava un gorilla nella stalla
    citando Adorno nell notti chiare / finché il primate stanco di ascoltare
    lo strangolò con una sciarpa gialla Dillo Con Parole Sue

  8. #8
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Quote Originariamente inviata da nivasio Visualizza il messaggio
    secondo me funziona anche solo semplicemente così:
    Codice PHP:
        $str '                                        ciao           dove  vai?  ';  
          
        
        
    $str1 str_replace('  ',' '$str);  
          
         
        echo 
    $str1;  
        
    ?> 
    perché se ci sono 3 spazi, ne toglie uno, però rimangono di nuovo 2 spazi così toglie l'altro, insomma alla fine anceh 10 spazi alla fine li toglie tutti, facendo un ciclo , spero di essermi spiegata
    Purtroppo no.
    Rimpiazza i due primi spazi con uno. Rimpiazza i due seguenti con uno. Hai dunque due spazi dopo il rimpiazzamento di quattro spazi quando str_replace si occupa del quinto e del sesto spazi della stringa originale, etc... str_replace non torna indietro, va sempre avanti.

    Ho messo delle u al posto degli spazi per mostrarti il funzionamento di str_replace
    codice:
    Prima del replace :
    uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuciaouuuuuuuuuuudoveuuvai?uu
    codice:
    Differenti stati del str_replace
    str_replace 1 : uuuuuuuuuuuuuuuuuuuuciaouuuuuudoveuvai?u
    str_replace 2 : uuuuuuuuuuciaouuudoveuvai?u
    str_replace 3 : uuuuuciaouudoveuvai?u
    str_replace 4 : uuuciaoudoveuvai?u
    str_replace 5 : uuciaoudoveuvai?u
    str_replace 6 : uciaoudoveuvai?u
    Quindi il ciclo ci vuole.

    spero di essermi spiegato.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  9. #9
    ho capito però mi sembra che rimanga solo il primo e l'ultimo quindi basterebbe fare un trim alla fine: echo trim($str1); cmq va benissimo come avete fatto prima voi, era per far qualcosa
    Un tardo hegeliano di Busalla / allevava un gorilla nella stalla
    citando Adorno nell notti chiare / finché il primate stanco di ascoltare
    lo strangolò con una sciarpa gialla Dillo Con Parole Sue

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    150
    La mia questione ha suscitato un certo interesse a quanto pare

    Comunque ha ragione in pieno badaze, senza "ciclare", non si può ottenere il risultato voluto.

    La mia questione sull'eliminazione degli "spazi multipli" tra parole di una stringa era conseguente al fatto che mi stavo creando uno script per ottenere le keywords di ricerca dai motori di ricerca, in primis Google, eleboranto le query di referer. Ora che ho però terminato il mio script con tanto di inserimento delle parole chiavi in un database, mi sono accorto che Google, attraverso la variabile $_SERVER["HTTP_REFERER"], non fornisce più la query con le parole chiavi inserite dall'utente

    Ed ho letto che è dovuto al fatto che usa il protocollo https ..... per cui credo che ho perso solo tempo

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.