text box + post php con IE si comporta in modo strano

moustache

Nuovo Utente
10 Mar 2020
14
0
1
Buon giorno a tutti,
Ho provato a cavarmela dasolo leggendo le vecchissime discussioni su questo tema, ma l'anomalia che ho è così singolare, almeno credo che non ho trovato nulla.
Molto banalmente ho creato un piccolo modulo in html, con dei text box dove raccogliere i dati, premendo il tasto di conferma modulo questi vengono elaborati da una pagina php che con il metodo "fputs" li salva su un file di testo che risiede nel server.
ciò che ottengo è una lista di dati salvata in un file .
php versione 5.3.5
charset html utf-8
Sever su base SUSe 11

esempio

il seguente è l'index.php
Codice:
<?php
..
..
  echo "<form action = \"pagina.php\" method=\"post\">";
  dato 1 " . $ic . " <input type=\"text\" name=\"dato1 \" value=\"" . $modulo[1] . "\">
  dato 2 " . $ic . " <input type=\"text\" name=\"dato2 \" value=\"" . $modulo[2] . "\">
..
il submit lo manda al file php elabora.php che contiene le seguenti righe

Codice:
<?php
..
fputs($fp, "\r\n" . htmlspecialchars($_POST["dato1"]). "\r\n" . htmlspecialchars($_POST["dato2"]);
..
..
queso giro genera un file "output.txt" che conterrà due righe ogniuna con i valori dato1 e dato2.

Di fatto funziona tutto a meraviglia, tranne che..... con IExplorer!!
Mi sto sforzando di essere oggettivo senza campanilismi, magari poi scopriamo che l'errore è mio..haha
ciò che accade con IE dalla versione 8 in poi di diverso da tutti gli altri è che i dati vengono inseriti su "output.txt" nella stessa riga.
io vorrei che IE come tutti gli altri andasse a capo ogni dato inserito su "output.txt".
 
Ultima modifica:

WmbertSea

Utente Attivo
28 Nov 2014
178
27
28
Ciao, il php viene eseguito lato server per cui non c'è motivo di credere che sia un problema del browser, a meno che tu non stia verificando il risultato aprendo quel file attraverso il browser.
Certo, i dati gli vengono passati da un form compilato lato client ma il ritorno a capo lo vai ad applicare da php con la sequenza "\r\n", per cui mi sembra strano che sia un problema relativo al browser.

Ad ogni modo in php per il ritorno a capo puoi usare la costante PHP_EOL in modo da essere certi che sia adoperata la giusta sequenza in base al sistema operativo del server. Tieni conto che su server linux la sequenza dovrebbe essere semplicemente "\n" anche se è possibile usare "\r\n" per avere un valido compromesso cross-platform.

Chiarisci eventualmente in che modo stai verificando il fatto che su IE vedi i dati su una stessa riga.
 
  • Like
Reactions: Mastiff_84

moustache

Nuovo Utente
10 Mar 2020
14
0
1
hai già avuto una risposta lo stesso giorno del tuo post ma, mi sembra, non l'hai considerata
Cosa intendi? io ho replicato ma la mia risposta è in attesa di validazione da parte di un moderatore, non so perchè tralaltro. non la ricopio perchè non credo sia accettato.. in sintesi comunque a seconda del browser che uso aggiunge o meno dei carriage che scombinano i dati inseriti.
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.197
312
83
la mia risposta è in attesa di validazione da parte di un moderatore
L'ho vista e non so il perché! Go provato a sbloccarla ma niente da fare!
Stò aspettando una risposta dall'amministratore
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.197
312
83
Riscrivi!
 

moustache

Nuovo Utente
10 Mar 2020
14
0
1
In risposta a webWmbertSea avevo scritto...
Ciao WmbertSea, ok.. corretto, il PHP è srv side, infatti inizialmente mi ero concentrato sul codice, ma poi indagando sono giunto al punto che ho descritto.
La mia convinzione, che potrebbe essere errata, deriva dalle prove che ho fatto, in particolare se il file "output.txt" lo apro con un editor quale vim, è "pulito" ovvero vedo ogni riga un dato e nient'altro.
Ma se parallelamente tramite php valorizzo delle variabili e con il comando "echo" le indirizzo su un file, mi fà vedere i caratteri di carriage, a fine di ogni riga con tutti i browser aggiunge "^M" mentre il testardo di IE no.., e da quì la mia deduzione.
dimmi se sono fuori strada.. ti ringrazio
 

WmbertSea

Utente Attivo
28 Nov 2014
178
27
28
Ciao, è bene che tu abbia ri-replicato perché non vedo la tua prima risposta.

Forse mi sto perdendo qualcosa ma non ho capito i vari passaggi che hai fatto, in particolare questo:
Ma se parallelamente tramite php valorizzo delle variabili e con il comando "echo" le indirizzo su un file, mi fà vedere i caratteri di carriage, a fine di ogni riga con tutti i browser aggiunge "^M" mentre il testardo di IE no..
Parli sempre del file output.txt che viene scritto dal tuo elabora.php, o di cosa?

Ad ogni modo quel "^M" è il carattere \r che viene male interpretato su unix/linux. Il fatto che sia mostrato è tecnicamente un errore.

Hai provato ad usare PHP_EOL come ho suggerito?
In tal caso, noti differenze?
 

moustache

Nuovo Utente
10 Mar 2020
14
0
1
Ciao WmbertSea,
Semplificando io ho un modulo che compilato scrive su un file, dove ^M correttamente è visto come un ritorno a capo e usando crome o firefox ogni dato inserito crea una nuova riga mentre ie no.
Parallelamente al codice che scrive sul file output.txt ho valorizzato una variabile con i dati inseriti dal modulo e poi la ho scritta su un file, e li i caratteri di ritorno sono scritti in chiaro, e vedi la differenza tra browser.
PHP_EOL avevo provato ad usarlo come dici tu e funziona, dove lo metto mi va a capo tanto quanto \rn ma con IE li mette comunque in-line.
va a capo solo ogni fputs, sicuramente l'errore e mio ma non capisco, mi sfugge qualcosa la codifica con cui è scritto il codice può influenzare?.
Ah con IE 6 si comporta apparentemente bene,potrebbe essere una concausa ma non il problema quindi..
 

WmbertSea

Utente Attivo
28 Nov 2014
178
27
28
Capito, dovrebbe comunque dipendere dalla versione di PHP e da come il sistema operativo del server interpreta e converte la sequenza di caratteri per il ritorno a capo durante la scrittura/lettura dei file.

Che "modo" utilizzi nel fopen?

Prova eventualmente ad aggiungere il flag "b", ad esempio "wb", per forzare il modo binario in scrittura, oppure "t", ad esempio "wt". In quest'ultimo caso usa solo "\n" per i ritorno a capo, perché viene eseguita in modo silente la conversione in "\r\n" solo quando è necessario.

va a capo solo ogni fputs, sicuramente l'errore e mio ma non capisco, mi sfugge qualcosa la codifica con cui è scritto il codice può influenzare?.
Presumo di si ma non saprei dirti di più.
 

moustache

Nuovo Utente
10 Mar 2020
14
0
1
Capito, dovrebbe comunque dipendere dalla versione di PHP e da come il sistema operativo del server interpreta e converte la sequenza di caratteri per il ritorno a capo durante la scrittura/lettura dei file.

Che "modo" utilizzi nel fopen?

Prova eventualmente ad aggiungere il flag "b", ad esempio "wb", per forzare il modo binario in scrittura, oppure "t", ad esempio "wt". In quest'ultimo caso usa solo "\n" per i ritorno a capo, perché viene eseguita in modo silente la conversione in "\r\n" solo quando è necessario.


Presumo di si ma non saprei dirti di più.
faccio prima un fopen "a" poi lo chiudo e lo riapro con "r+" così se non c'è lo crea e poi mi posiziono alla fine con fseek... etc
il parametro "b" mi mancava... provo e ti do riscontro.
ps:il doc è in UTF-8... ma non so in che modo possa influire grazie
 

WmbertSea

Utente Attivo
28 Nov 2014
178
27
28
il parametro "b" mi mancava... provo e ti do riscontro.
Bene, fai sapere.

Riporto intanto un riferimento a questo proposito, tratto dal manuale su php.net a questo link (le note dopo la lista dei possibili modi):
Different operating system families have different line-ending conventions.
...
If you use the wrong line ending characters when writing your files, you might find that other applications that open those files will "look funny".
...
You should use the 't' mode if you are working with plain-text files
...
You should use the 'b' in all other cases
 

moustache

Nuovo Utente
10 Mar 2020
14
0
1
Bene, fai sapere.

Riporto intanto un riferimento a questo proposito, tratto dal manuale su php.net a questo link (le note dopo la lista dei possibili modi):
Ciao Wumbertsea, scusa del ritardo della mia replica, ma il periodo ha messo la priorità nel "remotizzare il mondo" quindi ho dovuto accantonare il problema per un pò.

indovina testando il sito in un server windows mette sempre il tag di fine riga. con qualsiasi browser.
quindi effettivamente dipende dal charset del SO lato server.
modificandolo sullo SLES che usavo a livello di sistema operativo si comporta in modo costante, quindi trovata la quadra sui ritorni a capo ho risolto.. che fatica arrivarci però!! comunque la tua dritta è stata risolutiva!
Grazie
 

WmbertSea

Utente Attivo
28 Nov 2014
178
27
28
Ciao, figurati, non c'è nulla di cui scusarti. Mi fa piacere essere stato utile in qualche modo e soprattutto che tu sia riuscito a risolvere :)
Buone cose