Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    272

    Terminazioni di riga con Windows

    Premetto che uso Windows XP e PHP 4.2.3 , e che sto lavorando ad uno script che usa file di testo.
    Voglio che il contenuto di configurazione.txt possa essere modificato tramite form.
    configurazione.txt ha questo aspetto:

    <tipo>
    contenuto
    su più
    righe
    </tipo>
    <tipo>
    contenuto
    su più
    righe
    </tipo>
    ...

    Ecco come faccio:
    Ricavo un array con le righe di configurazione.txt tramite file(configurazione.txt)
    Con una funzione assegno i contenuti che stanno tra <tipo_contenuto>...</tipo_contenuto> a delle variabili
    Nel form l'utente può ora modificare attraverso una textarea (<textarea>$variabile</textarea>) queste variabili.

    Quando, effettuate le modifiche, l'utente preme il tasto di invio si tratta di riscrivere configurazione.txt con i nuovi valori. Quindi raccolgo i dati provenienti dal form in questo modo:

    Codice PHP:
    $array[] = "<tipo>\n".trim (stripslashes ($_POST['variabile']))."\n</tipo>"
    e dopo avere aperto il file con fopen lo riscrivo con un ciclo foreach. Fine
    Mi pare quasi di sentire la domanda: "Ma dove sta il problema?". Vi accontento subito.
    Dopo la riscrittura le terminazioni di riga si sono duplicate, così per intenderci

    <tipo>
    contenuto

    su più

    righe
    </tipo>

    e si moltiplicano ad ogni modifica.

    Avrei anche risolto ma non capisco perchè se al primo passaggio ricavo l'array in questo modo:
    Codice PHP:
    $array str_replace ("\r"""file (configurazione.txt)): 
    eliminando cioè \r con str_replace il problema sparisce.

  2. #2
    perché in windows il carattere "a capo" è dato da "\n\r"

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    272
    Io sapevo \r\n.
    Così dici tu eliminando \r con str_replace resta \n?
    Va bene ma perché si duplicavano non lo capisco ancora.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    434
    Originariamente inviato da pugia
    perché in windows il carattere "a capo" è dato da "\n\r"
    veramente è \r\n
    anche se non ho capito dettagliatamente il tuo problema..

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    272
    @billo
    Se mi dici quale passo della mia spiegazione lascia a desiderare sarò più che lieto di spiegarlo meglio.

  6. #6
    Originariamente inviato da billo
    veramente è \r\n
    veramente non vedo dove stia la differenza

    usecram prova a eliminare anche il \n e prova a vedere cosa viene fuori

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    434
    ho fatto un po' di prove..
    con \r\n esce il carattere a capo, con \n\r escono due caratteri estranei (non a capo), con \r esce carattere sconosciuto, con \n stesso fatto. Ho provato ad incollare \r prima di \n e fa il carattere a capo

  8. #8
    allora ... l'invio, su windows, è \r\n

    Se trova sequenze diverse di questa, non riconoscendole, mette il codice ascii corrispondente al font usato che nel 99% non ha una rappresentazione grafica e quindi compare un bel quadrato nero (vedi notepad)

    posta comunque il codice che usi per scrivere il file perché il problema è li

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    272
    Duuunque innanzitutto grazie per la partecipazione.
    Andiamo con ordine:
    usecram prova a eliminare anche il \n e prova a vedere cosa viene fuori
    Ovviamente avevo già provato
    Codice PHP:
    $array str_replace ("\r\n"""file (configurazione.txt)); 
    Elimina la terminazione di riga quindi accade questo
    <tipo>
    contenuto su più righe
    </tipo>
    Ma io le terminazioni di riga le voglio mantenere.
    Per completezza ho provato a togliere solo \n
    Codice PHP:
    $array str_replace ("\n"""file (configurazione.txt)); 
    Ed ecco il risultato:
    <tipo>
    contenutosu piùrighe
    </tipo>
    Spuntano i quadratini neri (chi usa Mozilla per visualizzare questo 3d non li vede). Nella textarea del browser però le terminazioni di riga si conservano.

    Detto questo
    posta comunque il codice che usi per scrivere il file perché il problema è li
    Con questa funzione estraggo i dati dal file txt
    Codice PHP:
    function estraiVariabiliConfigurazione ()  {
          global 
    $indirizzo_configurazione$conferma_inscrizione$conferma_cancellazione$benvenuto
                    
    $congedo$firma;
        (
    file_exists ($indirizzo_configurazione))?
        
    $array_configurazione str_replace ("\r"""file ($indirizzo_configurazione)):
        die (
    "<p class=\"segnalazione\">Impossibile trovare il file di configurazione</p>");
        
    $conferma_inscrizione recuperaDati ($array_configurazione"confermaInscrizione");
        
    $conferma_cancellazione recuperaDati ($array_configurazione"confermaCancellazione");
        
    $benvenuto recuperaDati ($array_configurazione"benvenuto");
        
    $congedo recuperaDati ($array_configurazione"congedo");
        
    $firma recuperaDati ($array_configurazione"firma");

    recuperaDati() si occupa di reperire ciò che si trova ad esempio tra <firma> e </firma>
    Poi visualizzo le variabili in textarea affinché l'utente possa modificare i valori (es: <textarea>$conferma_inscrizione</textarea>)
    Quindi ricompongo i dati provenienti dal form per riscrivere il file di testo in questo modo:

    Codice PHP:
    function riscriviVariabiliConfigurazione ()  {
          global 
    $indirizzo_configurazione;
         
    $array_configurazione[0] = "<confermaInscrizione>\n".trim (stripslashes ($_POST['conferma_inscrizione']))."\n</confermaInscrizione>";
        
    $array_configurazione[1] = "<confermaCancellazione>\n".trim (stripslashes ($_POST['conferma_cancellazione']))."\n</confermaCancellazione>";
        
    $array_configurazione[2] = "<benvenuto>\n".trim (stripslashes ($_POST['benvenuto']))."\n</benvenuto>";
        
    $array_configurazione[3] = "<congedo>\n".trim (stripslashes ($_POST['congedo']))."\n</congedo>";
        
    $array_configurazione[4] = "<firma>\n".trim (stripslashes ($_POST['firma']))."\n</firma>";
        
    $file fopen ($indirizzo_configurazione"w");
        foreach (
    $array_configurazione as $valore)  {
            
    fwrite ($file"$valore\n");
        }
        
    fclose ($file);


    Direi che è tutto. Ripeto che tutto funziona ma non c'è gusto senza sapere il perché. Confido in voi

  10. #10
    apri il file come

    wbt e non come w

    il problema dovrebbe "magicamente" sparire

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.