Notizie: puoi sempre seguire i nostri aggiornamenti su Twitter (@MozillaItalia) e Facebook (/MozillaItalia)

Autore Topic: Firefox 3.0.3: responseText di XMLHttpRequest riceve caratteri errati dal serve  (Letto 8316 volte)

0 Utenti e 3 Visitatori stanno visualizzando questo topic.

Offline mob

  • Post: 29
Fino a 2 giorni fa utilizzavo Firefox 2.0.17 e tutte le mia applicazioni funzionavano perfettamente.
Dopo aver installato Firefox 3.0.3 un gruppo di applicazioni ha smesso di funzionare.
Ho rilevato che utilizzando XMLHttpRequest ricevo nel responseText un carattere in più.
Mi spiego meglio:
Il server chiamato, ritorna una stringa che contiene rtcd=0¶
Usando Firefox 2.0.17 (e precedenti) il reponseText contiene la stringa rtcd=0¶ che gli viene passata dal server chiamato e di cui io testo la presenza per proseguire con l'applicazione.
Usando invece Firefox 3.0.3 (e precedenti) il reponseText contiene la stringa rtcd=0¶, quindi Firefox 3.0.3 aggiunge di sua iniziativa il carattere Â
Ho provato a utilizzare alcuni altri caratteri speciali come £ e § e anche con questi si comporta nello stesso modo.
Ho dovuto far disinstallare la versione 3 a tutti gli utenti che l'avevano installata per permettere loro di riuscire a lavorare.
Vorrei far notare che in wikipedia, relativamente a XMLHttpRequest è segnalato che questo era un problema relativo ai caratteri non-ASCII era specifico di IE, ma che firefox invece funzionava correttamente.

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Sembra un problema di codifica.
Ipotizzando che req sia l'oggetto XMLHttpRequest, prova a utilizzare req.overrideMimeType('text/plain; charset=x-user-defined') prima di inviare la richiesta.
Se non funziona, prova a mettere req.overrideMimeType('text/plain; charset=XXX'), dove XXX è la codifica usata dal server nella risposta.

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos

Offline mob

  • Post: 29
Questo è il codice che utilizzo e che con firefox 2 funziona perfettamente, mentre con il 3 mi ritorna un false perchè la stringa ha quel carattere in più
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <meta http-equiv="expires" content="0">
  <meta http-equiv="pragma" content="no-cache">
......

pgmtocall = '/cgigrp/vq10rh1a.cgi';
stringpar = 'sppno=' + document.getElementById("sppno").value;
var client = new XMLHttpRequest();
client.open("POST",pgmtocall,false);
client.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
client.setRequestHeader("Content-Length", stringpar.length);
client.send(stringpar);
if (client.responseText.indexOf('rtnrtcd=0¶')) {
   return true;
}
else {
   return false;
}



Offline mob

  • Post: 29
O forse è questo il tuo problema: https://bugzilla.mozilla.org/show_bug.cgi?id=416178 ?
no, non è questo, la mia applicazione non va in errore, prosegue correttamente, ma ricevendo un carattere diverso da quello che mi aspetto, poi prende la strada sbagliata (return false invece di return true)

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
E invece mi sa che il problema è proprio quello: "rtnrtcd=0¶" è la "versione UTF8" di "rtnrtcd=0¶". Firefox 3, a differenza delle precedenti vesioni, manda la richiesta specificando che il charset è UTF8.

Se metti

Codice: [Seleziona]
client.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso8859-1");
cambia qualcosa?



Offline mob

  • Post: 29
E invece mi sa che il problema è proprio quello: "rtnrtcd=0¶" è la "versione UTF8" di "rtnrtcd=0¶". Firefox 3, a differenza delle precedenti vesioni, manda la richiesta specificando che il charset è UTF8.

Se metti

Codice: [Seleziona]
client.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso8859-1");
cambia qualcosa?

dammi qualche minuto che provo, poi ti dico.


Edit by michro: modificato il quote


« Ultima modifica: 01 Ottobre 2008 10:30:51 da michro »

Offline mob

  • Post: 29
E invece mi sa che il problema è proprio quello: "rtnrtcd=0¶" è la "versione UTF8" di "rtnrtcd=0¶". Firefox 3, a differenza delle precedenti vesioni, manda la richiesta specificando che il charset è UTF8.

Se metti

Codice: [Seleziona]
client.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso8859-1");
cambia qualcosa?



Sorry, mi è anche andato in crash il pc su cui stavo facendo il test e ho dovuto installarne un altro al volo. Quando la sfortuna ci si mette...
Allora ho fatto il test mettendo overrideMimeType('text/plain; charset=x-user-defined') ed ho ottenuto altri caratteri astrusi che non ti so neanche descrivere.
Poi ho tolto quello e ho provato a mettere client.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso8859-1");
ma ottengo lo stesso risultato che senza la decalre del charset.
p.s. tra una prova e l'altra, dato che non si sa mai, ho anche fatto lo svuotamento della cache.



Offline mob

  • Post: 29
Dopo varie prove sono giunta alla seguente conclusione:
Utilizzando le mie impostazione, il xmlHttpRequest esegue il send utilizzando il charset iso-8859-1
Questo lo fa correttamente sia Firefox 2 che Firefox 3.
La differenza nasce nel testo di ritorno:
il responseText di Firefox 2 è in charset iso-8859-1
il responseText di Firefox 3 è in charset utf-8

Come faccio a dirgli che il responseText deve essere iso-8859-1?



Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Penso che la differenza nella risposta del server deve per forza dipendere da una richiesta diversa da parte di firefox.

Prova a mettere
Codice: [Seleziona]
client.overrideMimeType('application/x-www-form-urlencoded; charset=iso8859-1')prima di fare il send.

Offline mob

  • Post: 29
Penso che la differenza nella risposta del server deve per forza dipendere da una richiesta diversa da parte di firefox.

Prova a mettere
Codice: [Seleziona]
client.overrideMimeType('application/x-www-form-urlencoded; charset=iso8859-1')prima di fare il send.

Provato, non cambia niente.
eppoi quella specifica era già in
client.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso8859-1");

Il problema è che, se ho ben capito, con quella istruzione si dice come sono i dati in uscita, non come devono essere codificati quelli di ritorno.

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
setRequestHeader riguarda la richiesta, overrideMimeType dovrebbe sovrascrivere il mimetype inviato dal server.

Io penso che la modifica indicata in https://bugzilla.mozilla.org/show_bug.cgi?id=416178 cambi in qualche modo il comportamento del tuo server (che forse se non c'è un charset definito, risponde con iso8859-1, è solo un'ipotesi).

Per curiosità, se usi sendAsBinary anzichè send (funziona solo in firefox 3) ottieni lo stesso risultato?

Comunque vedo che c'è un bug aperto (forse da te) su questo:
https://bugzilla.mozilla.org/show_bug.cgi?id=457845

Offline mob

  • Post: 29
setRequestHeader riguarda la richiesta, overrideMimeType dovrebbe sovrascrivere il mimetype inviato dal server.

Io penso che la modifica indicata in https://bugzilla.mozilla.org/show_bug.cgi?id=416178 cambi in qualche modo il comportamento del tuo server (che forse se non c'è un charset definito, risponde con iso8859-1, è solo un'ipotesi).

Per curiosità, se usi sendAsBinary anzichè send (funziona solo in firefox 3) ottieni lo stesso risultato?

Comunque vedo che c'è un bug aperto (forse da te) su questo:
https://bugzilla.mozilla.org/show_bug.cgi?id=457845
non ho provato, ho il divieto di utilizzare comandi che non siano compatibili con versioni precedenti di firefox.
presa da disperazione ho anche provato ad inserire charset=ISO-8859-1nell'header del file prodotto dal programma chiamato dal xmlhttprequest, ma invece di migliorare la situazione, ho ricevuto una valanga di simboli e nessuna lettera intelleggibile.
sì, il bug l'ho aperto io.
sì il bug l'ho aperto io,
.

Offline mob

  • Post: 29
ho fatto un'ultima prova:
ho inserito client.overrideMimeType('application/x-www-form-urlencoded; charset=iso8859-1') e verificato che ricevo il carattere corretto con Firefox 2 e quello errato con Firefox 3.

poi l'ho sostituito con client.overrideMimeType('application/x-www-form-urlencoded; charset=utf-8') e verificato che ricevo il carattere errato con Firefox 2 (ma diverso da quello che ritornava prima con Firefox 3) e ricevo invece il carattere corretto con firefox 3.

dici che è il caso che aggiunga questa cosa nel bug?

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Quest'ultima prova che hai fatto conferma che il tuo server invia la risposta in iso8859-1 quando è Firefox2 a fare la richiesta, mentre è in utf8 quando la fa Firefox3, ma sembra anche indicare che invia il charset in modo errato in uno dei due casi.

Io continuo a pensare che dipenda dal fatto che Firefox2 fa la richiesta senza specificare il charset, mentre Firefox3 aggiunge charset=utf8 di suo (vedi il bug che ti ho segnalato più volte).

Se è così, mi viene il dubbio che vi toccherà risolvere la cosa lato server, perché non credo che torneranno indietro su questo.

Cmq io ti consiglio di aggiungere i risultati della prova che hai fatto, tra l'altro ho visto che ti hanno risposto e questo è un buon segno!
Forse anche questo https://bugzilla.mozilla.org/show_bug.cgi?id=241540 può essere interessante per capire il problema.

0 Utenti e 3 Visitatori stanno visualizzando questo topic.