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

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline mob

  • Post: 29
Ciao, sì, ho verificato il server http che ha come charset di default ISO-8859-1, poi ho fatto un alert di document.characterSet e verificato che contiene ISO-8859-1
Ieri ho fatto parecchie prove incrociate e alla fine ho ottenuto lo stesso risultato valido sia con firefox 2 che col 3 (vedi il test case 4 dell'allegato), però ho perso la compatibilità con IE con non funziona più, mentre prima non dava problemi.
Ho anche provato ad intercettare l'overrideMime e non emetterlo se si sta usando IE, ma a quel punto facendo la chiamata in utf-8 mi ritorna poi il carattere sbagliato.

https://bugzilla.mozilla.org/attachment.cgi?id=341419

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Considera che con Firefox 3, queste due chiamate
Codice: [Seleziona]
client.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; utf-8");
Codice: [Seleziona]
client.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");sono identitche, mentre con Firefox 2 no.

Non puoi mettere utf8 come charset di default sul server? In questo modo non dovresti avere più problemi.

P.S: fai la prova con il log come di hanno suggerito su bugzilla.

Offline mob

  • Post: 29
Considera che con Firefox 3, queste due chiamate
Codice: [Seleziona]
client.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; utf-8");
Codice: [Seleziona]
client.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");sono identitche, mentre con Firefox 2 no.

Non puoi mettere utf8 come charset di default sul server? In questo modo non dovresti avere più problemi.

P.S: fai la prova con il log come di hanno suggerito su bugzilla.

Ciao, ho preparato tutti i log come mi hanno chiesto, e verificando ho scoperto una cosa proprio curiosa, qualsiasi charset tu metta in setRequestHeader, firefox 3 invia sempre e comunque utf-8  :o

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Ciao, ho preparato tutti i log come mi hanno chiesto, e verificando ho scoperto una cosa proprio curiosa, qualsiasi charset tu metta in setRequestHeader, firefox 3 invia sempre e comunque utf-8  :o

... e vedi che allora piano piano finiamo dove avevo ipotizzato io...
http://forum.mozillaitalia.org/index.php?topic=35410.msg219197#msg219197


Offline mob

  • Post: 29
Ciao, ho preparato tutti i log come mi hanno chiesto, e verificando ho scoperto una cosa proprio curiosa, qualsiasi charset tu metta in setRequestHeader, firefox 3 invia sempre e comunque utf-8  :o

... e vedi che allora piano piano finiamo dove avevo ipotizzato io...
http://forum.mozillaitalia.org/index.php?topic=35410.msg219197#msg219197



Direi che l'implementazione non gli è venuta proprio bene, mi sta anche bene che se non metto nulla, impostino di default utf-8, però se indico un charset specifico, sarebbe carino che utilizzassero quello che chiedo io, no?  :roll:

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Direi che l'implementazione non gli è venuta proprio bene, mi sta anche bene che se non metto nulla, impostino di default utf-8, però se indico un charset specifico, sarebbe carino che utilizzassero quello che chiedo io, no?  :roll:

Sono d'accordo con te, tra l'altro mi sbaglierò, ma mi sembra anche in violazione delle specifiche.

Offline mob

  • Post: 29
[
Sono d'accordo con te, tra l'altro mi sbaglierò, ma mi sembra anche in violazione delle specifiche.

Leggi qui, non sono un fenomeno con l'inglese, ma non mi sembra ci sia scritto che si usa utf-8 e basta, io traduco che è utf-8 se non diversamente specificato.
http://www.w3.org/TR/XMLHttpRequest/#setrequestheader

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Uhmmm... mi viene un dubbio: se guardi la sezione http://www.w3.org/TR/XMLHttpRequest/#send , si legge che se si tratta di una stringa DOM

Citazione
Encode data using UTF-8 for transmission.

If a Content-Type header is set using setRequestHeader() set the charset parameter of that header to UTF-8.

Sembrerebbe che non sia consentita altra codifica.
Se è così, il comportamento di Firefox 3 è corretto e non c'è nessun bug.
Continuo a pensare che ti convenga cambiare qualcosa lato server.

Offline mob

  • Post: 29
Spiegami un attimo la differenza tra  DOMstring e document, perchè vedo che li trattano in modo diverso, ma a questo punto sto cominciando a fare un po' di confusione.

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
DOMstring è in sostanza una semplice sequenza di byte contenuta nel documento, mentre document è l'intero documento HTML o XML.




Offline mob

  • Post: 29
Continuo a pensare che ti convenga cambiare qualcosa lato server.
Ci ho provato, fortunatamento ho un server di sviluppo nel quale posso fare prove senza incasinare tutta l'azienda  :)
Ho trovato una funzione "Serie caratteri predefinita" in "impostazioni di contenuto - mime" e l'ho impostata a UTF-8.
Poi sono intervenuta nel html e ho modificato il meta mettendo
Codice: [Seleziona]
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Ma non funziona ugualmente, c'è qualcosa che non riesco a capire, ho creato il log e mi ritrovo con
un
Codice: [Seleziona]
ParseContentType [type=text/html; charset=ISO-8859-1] che mi sembra arrivare dal proxy.
e un
Codice: [Seleziona]
nsHttpTransaction::ParseLine [Content-Type: text/html; charset=ISO-8859-1]subito dopo la chiamata al xmlhttprequest.

Giuro che nell'html di charset=ISO-8859-1 non ce n'è più neanche uno.
Secondo te può essere il proxy che me lo cambia sotto il naso anche se lo imposto a utf-8?
 

Offline mob

  • Post: 29
No, il proxy non c'entra, l'ho bypassato e non è cambiato niente.
A questo punto aspetto di vedere cosa mi rispondono sui log che ho mandato.

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Non potresti scegliere una soluzione "sporca" ma funzionante tipo questa?

Codice: [Seleziona]
if (! document.all) {
  // questa chiamata viene fatta solo da Firefox, sia 2 che 3
  client.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;
charset=UTF-8");
  client.overrideMimeType("text/html; charset=UTF-8");
}
else {
  // questa viene fatta dagli altri browser
  client.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
}


Offline mob

  • Post: 29
se non ho altra scelta mi toccherà fare così.
comunque prima di dare l'ok ad installare ff3 agli utenti, devo aspettare che mi rispondano sul problema che ho nell'apertura dei tab da pop-up.
col fatto che non si apre più all'interno del pop-up, ma nella pagina iniziale di firefox, chi ha il pop-up aperto non vede il tab e pensa di non aver cliccato, quindi continua a riaprirlo più volte senza accorgersene.

Offline mob

  • Post: 29
Ho deciso di scegliere la soluzione "sporca"  :wink:
Puoi darmi un ultimo aiutino?
Ho fatto i test su FF2, FF3, Explorer, Opera e Netscape.
Mettendo le tue istruzioni funzionano tutti bene tranne Netscape che segue la strada di FF, ma va in palla e mi esce quando fa il client.send.
Ho bisogno che esegua le istruzioni di explorer perchè con quelle funziona.


0 Utenti e 1 Visitatore stanno visualizzando questo topic.