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

moustache

Nuovo Utente
10 Mar 2020
15
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

Moderatore
Membro dello Staff
MOD
28 Nov 2014
432
73
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
15
0
1
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.
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
 
Ultima modifica:

moustache

Nuovo Utente
10 Mar 2020
15
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.449
338
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
 

moustache

Nuovo Utente
10 Mar 2020
15
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

Moderatore
Membro dello Staff
MOD
28 Nov 2014
432
73
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
15
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

Moderatore
Membro dello Staff
MOD
28 Nov 2014
432
73
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
15
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

Moderatore
Membro dello Staff
MOD
28 Nov 2014
432
73
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
15
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

Moderatore
Membro dello Staff
MOD
28 Nov 2014
432
73
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
 
Discussioni simili
Autore Titolo Forum Risposte Data
T creare una serie di combobox e text box e che salvano un file di text sul disco si può ? Visual Basic 1
Monital slect box e input text inviano dati senza il tasto invia PHP 5
G Text Box Autoaggiornanti Classic ASP 2
C text box obbligatorio e con un certo numero di caratteri HTML e CSS 6
MarcoGrazia Rich Text Editor, quale? Javascript 1
otto9due Input text: accetta solo numeri e non può essere vuoto. Javascript 9
F Leggere e aggiornare dati di campi <input text> su file di test PHP 0
D modificare questo codice per inserimento in text e non in tabella jQuery 1
D assegnare risultato di una jquery ad una text Javascript 2
D error text in table HTML e CSS 11
G Impostare suggerimenti campo text di un form Javascript 2
R uploader di immagini e text PHP 0
F if :contains text do action jQuery 0
P [PHP] Inserire stringhe in input(text),memorizzarle e stamparle in file successivo PHP 0
D [Javascript] Text area visibile Javascript 0
D [Javascript] [HTML] Evidenziare testo di una text Javascript 1
R How to add text watermark direct on the HTML page? HTML e CSS 1
M [Javascript] Visualizza contenuto file XML aggiornato con text scroll Javascript 0
eraclio666 [PHP] Input text dopo sue select PHP 4
trattorino [Javascript] [HTML] risultato imput dentro text area Javascript 2
L [Javascript] indirizzare stringa come nome input text Javascript 1
Monital [HTML] le inpuit text non si rimpiccioliscono se si diminuisce la finestra del browser HTML e CSS 4
Monital [CSS] input text differenti HTML e CSS 5
M Dimensioni diverse degli input text tra Firefox per Linux e Windows HTML e CSS 3
M Edit Text - tastierino che non sparisce Sviluppo app per Android 0
C controllo con metodo text non funzionante Javascript 7
T Richiamare il click su un input type="image" alla pressione del tasto invio su una text area. PHP 0
napuleone OnChange con oggetto Text non funziona Javascript 3
D Inserire campo input text in questo codice. jQuery 2
M Aggiungere input text dopo aver selezionato un campo da una select option Presentati al Forum 0
L Scrivere valori nel campo INPUT TEXT a seconda della SELECT Javascript 0
M Problema con ricerca full-text PHP 1
K strano focus input type="text" HTML e CSS 4
D Valore campo input type text vuoto PHP 4
M Ordinare visualizzazione record tramite form con input "text" PHP 2
xone Form con campi input text e upload file PHP 4
L [JS] Disattivare / Attivare - Input Text Javascript 8
filippino [Java] Inserimento Label e Text field Java 1
StarFish [MySQL] Full Text problema rilevanza risultati MySQL 0
V [excel] Option Compare Text Windows e Software 1
F value di un input text PHP 4
A [RISOLTO]Ripulire una text-area con un click Javascript 4
D get the selected text in JavaScript Javascript 9
F E' possibile far comparire una scritta in un div al cambio di un valore di un form text??? Javascript 2
G modificare il campo blob con il campo text PHP 0
G caricare immagini sul db con il formato text PHP 3
P text/ javascript in html Javascript 3
P Valore seriale in input text PHP 0
P select da riempire tramite text PHP 39
A Ricerca full text mysq ed estrazione con php PHP 8

Discussioni simili