Newsgroup: it.comp.lang.javascript
Titolo: XMLHttpRequest e charset utf8, qualcosa non funziona

Vorrei sapere se certe cose capitano solo a me, quindi il problema
sarei io, oppure se capitano anche ad altri, allora posso cercare la
soluzione al di fuori della mia mente.
Ho scritto un programmino perl che mi legge una tabella in un database
mysql e mi restituisce un tag html label con il titolo ed un tag html
select completo di tutti i dati. Fin qui tutto bene
Quando chiamo lo script da browser ho il titolo con caratteri estesi
strani (non interpretati correttamente) e la lista di select perfetta
con tutti i caratteri estesi in ordine. I caratteri estesi sono vocali
con l'accento, la c cediglia ecc..
Quando chiamo lo script da XMLHttpRequest per riempire un tag html div
ecco che ho il titolo (tag label) con i caratteri correttamente
visualizzati mentre la lista (tag select) mostra un rombo nero con un
punto interrogativo al posto dei caratteri estesi.
Da notare che il javascript viene chiamato nel modo seguente
<script type="text/javascript" charset="UTF-8" src="../js/navtab.js"></
script>
cioè con l'indicazione charset="UTF-8"
La pagina con il div da riempire riporta il suo bel meta con
charset=UTF-8
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
come se non bastasse per scrupolo anche le chiamate css hanno
charset=UTF-8
<link href="../css/navtab_ff.css" rel="stylesheet" type="text/css"
charset="UTF-8" />
Ho provato anche ad inserire nel codice javascript
getAllResponseHeaders() ed ho osservato il seguente messaggio
Transfer-Encoding: chunked Content-Type: text/html
Mi sembra tutto in ordine, però non riesco a spiegare la differenza
fra la chiamata diretta da browser e quella per mezzo di
XMLHttpRequest.
Qualcuno ha avuto lo stesso problema?
Grazie in anticipio a chi voglia rispondere
www.oreste.parlatano.com

 Qualcuno ha avuto lo stesso problema?
non piu di tanto base64_encode(utf8_decode($dato_php));
base64_decode(dato) in js :)
cosi prende anche la merda


 >
www.oreste.parlatano.com
Ti ringrazio, prima di scrivere il post avevo sperimentato alcune
funzioni javascript una delle quali si trova al seguente indirizzo:
http://www.webtoolkit.info/javascript-base64.html
i risultati non sono stati incoraggianti purtroppo.
Il fatto di avere dei risultati corretti in una semplice pagina web
(senza div o chiamate Ajax) ed al contrario di avere risultati quasi
illeggibili con una chiamata XMLHttpRequest mi ha fatto dedurre che il
problema è legato all'uso di XMLHttpRequest, la lettura approfondita
delle specifiche di questo metodo non mi ha aperto uno spiraglio.
Grazie di nuovo ma devo cercare un'altra strada.

 delle specifiche di questo metodo non mi ha aperto uno spiraglio.
Hai provato a vedere con Firebug la differenza degli header che
vengono passati tra una chiamata al suddetto file, direttamente
da browser, e una tramite XMLHttpRequest?
Se neanche questo ti è di aiuto, pubblica online una pagina che
replica tale comportamento che ci buttiamo un occhio.
-- 
~ Plagiarism is copying from one source;
research is copying from two or more
(Wilson Mizner)

 replica tale comportamento che ci buttiamo un occhio.
Grazie Zero, non ho indicato il link perchè fa parte di un'area
protetta da password, ma sposto il tutto in un'area pubblica e
approfitto della tua cortesia
Ho analizzato anche gli HTTP header senza notare una significativa
differenza fra la chiamata Ajax e quella diretta allo script Perl,
certo è che più occhi vedono meglio di due :)
Chiedo un'attimo di pazienza e posto i link.
Grazie di nuovo.

 replica tale comportamento che ci buttiamo un occhio.
Ecco i link in zona pubblica:
1. chiamata via XMLHttpRequest
http://mhn.museumoz.org/suporte2.html
2. chiamata diretta sulla prima tabella
http://mhn.museumoz.org/cgi-bin/suporte2.pl?tabxx=tab01
spero tu abbia voglia e tempo per dare un'occhiata
Ciao

 
http://mhn.museumoz.org/cgi-bin/suporte2.pl?tabxx=tab01
Molto semplice. 
Il documento restituito dal link 2. è, per usare un termine tecnico
genovese, un gran "paciugo". Il titolo è generato in UTF-8, mentre il resto
è in iso-8859-1.
Quando lo visualizzi direttamente, il tuo browser assume iso-8859-1 e il
titolo non viene, per ovvie ragioni, reso correttamente.
Quando viene caricato via XHR nella pagina 1, il frammento viene inserito in
un documento dichiarato come "UTF-8" tramite tag <meta>. Quindi, il titolo
sarà reso correttamente, mentre il resto conterrà dei singoli byte (cioè i
caratteri iso-8859-1) che non sono interpretabili come sequenze UTF-8
valide (quindi: rombi neri).
Max


Azz... dovevo ascoltare le mie figlie quando mi dicono che l'età non
perdona....
Adesso sistemo lo scipt Perl, il problema è lì dunque.
Grazie di nuovo

 Adesso sistemo lo scipt Perl, il problema è lì dunque.
Non ho fatto in tempo a vedere il NG che era già tutto risolto. :)
Ho comunque dato una scorsa veloce ai tuoi link: ma per curiosità,
da Perl imposti il charset della risposta a utf-8? Perché non pare
che al browser arrivi.
Ma come ho detto, ho dato solo una scorsa veloce.
-- 
~ Ci sono tre modi di fare le cose.
Giuste, sbagliate e come dico io. (Robert De Niro in "Casinò")

 che al browser arrivi.
Posto il codice in calce.
Mi risolve il problema in parte, comunque in modo soddisfacente, nel
codice xhtml uso per sicurezza e per non avere grattacapi le HTML
entity ( &eacute; )
sub scheda {
my $scheda = HTML::Template->new_file($tmt);
my $sql = 'SELECT * FROM '.$tabdb;
my $sth = $dbh->prepare($sql);
$sth->execute;
my @rows;
while (my @data_row = $sth->fetchrow_array) {
        my %row;
        $row{id} = $data_row[0];
        $row{nome} = $data_row[1];
        push @rows, \%row;
}
$scheda->param(tit=>$tit);
$scheda->param(tabdb=>\@rows);
print $q->header(-charset=>'iso-8859-1');
print $q->start_html();
print $scheda->output();
print $q->end_html();
}
Ciao