View Full Version : [ajax-php-ajax] problema caratteri accentati
AlexCyber
21-06-2007, 08:35
ciao raga ho una pagina html con il seguente charset
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
i caratteri accentati presenti nella pagina vengono visualizzati correttamente
..se però faccio una richiesta ajax x modificare una parte della pagina html i caratteri accentati non vengono visualizzati correttamente
nella richiesta ajax uso la funzione encodeURIComponent e
decodeURIComponent per inviare e ricevere i dati
il file php che riceve i dati inviati da ajax è così fatto:
<?php
// utf8_decode/utf8_encode mi permettono di gestire correttamente i caratteri accentati
$html = utf8_decode($_POST['cont']);
// eventuali altre operazioni
echo utf8_encode($html);
?>
I caratteri accentati non vengono visualizzati correttamente, in locale però tutto funziona correttamente, qualche consiglio?
..se però faccio una richiesta ajax x modificare una parte della pagina html i caratteri accentati non vengono visualizzati correttamenteLe cose sicure sono 2: i dati inviati tramite POST sono codificati in ISO-8859-1 e la risposta che devi mandare in output deve essere codificata nuovamente in ISO-8859-1.
Tu per mandare in output la risposta usi utf8_encode ma questa funzione prende in input un testo ISO-8859-1 e lo converte in UTF-8. Quindi non è giusto!
Poi dovresti specificare meglio cosa fai in quelle "eventuali altre operazioni". Se fare le conversioni da ISO-8859-1 a UTF-8 e viceversa o meno ... dipende appunto da cosa devi fare di preciso.
Prova a fare un bell'
header("Content-type: text/html; charset=ISO-8859-1");
nel file php chiamato attraverso ajax.
AlexCyber
21-06-2007, 16:56
Le cose sicure sono 2: i dati inviati tramite POST sono codificati in ISO-8859-1 e la risposta che devi mandare in output deve essere codificata nuovamente in ISO-8859-1.
Tu per mandare in output la risposta usi utf8_encode ma questa funzione prende in input un testo ISO-8859-1 e lo converte in UTF-8. Quindi non è giusto!
Poi dovresti specificare meglio cosa fai in quelle "eventuali altre operazioni". Se fare le conversioni da ISO-8859-1 a UTF-8 e viceversa o meno ... dipende appunto da cosa devi fare di preciso.
intanto grazie ragazzi x l'aiuto che mi state dando
@andbin
come da te riportato in "eventuali altre operazioni" per il momento rimane solamente un commento
la varibile del file php $html = $_POST['cont']; contiene testo inserito in una textarea
come hai visto nello script ho usato la funzione
$html = utf8_decode($_POST['cont']); che se non sbaglio dovrebbe restituirmi i caratteri nella codifica ISO-8859-1 e questo dovrebbe servirmi nell'eventualità la stringa dovesse essere ulteriormente manipolata per poi alla fine restituirla nuovamente nel formato utf-8 con
echo utf8_encode($html);
documentandomi una possibilità potrebbe essere quella di convertire i caratteri accentati con htmlentities($stringa), ma non mi sembra la soluzione + seria
Le cose sicure sono 2: i dati inviati tramite POST sono codificati in ISO-8859-1 e la risposta che devi mandare in output deve essere codificata nuovamente in ISO-8859-1.
...ma encodeURIComponent di javascript non dovrebbe far ricevere i dati a php nel formato utf-8
sinceramente non ho ancora le idee chiare....
ciao e grazie
$html = utf8_decode($_POST['cont']); che se non sbaglio dovrebbe restituirmi i caratteri nella codifica ISO-8859-1Se il contenuto di $_POST['cont'] fosse in UTF-8, ok ...... ma è già in ISO-8859-1!!!
per poi alla fine restituirla nuovamente nel formato utf-8 con
echo utf8_encode($html);Anche qui ... non devi inviarla come UTF-8 ma come ISO-8859-1.
Alt, sono andato a vedere cosa fa encodeURIComponent (che in effetti non mi ricordavo cosa fa esattamente). Data ad esempio una stringa "à", la converte in "%EF%BF%BD". Ed effettivamente è in UTF-8.
Quindi è corretto usare da php utf8_decode per ottenere nuovamente la stringa in ISO-8859-1.
Però la risposta che ricevi lato Javascript non devi per forza di cose passarla a decodeURIComponent!! Cioè basta che dal PHP mandi in output direttamente del testo in ISO-8859-1.
Credo eh ... dovrei provare ma non ho tempo adesso.
AlexCyber
21-06-2007, 17:23
Se il contenuto di $_POST['cont'] fosse in UTF-8, ok ...... ma è già in ISO-8859-1!!!
Anche qui ... non devi inviarla come UTF-8 ma come ISO-8859-1.
puoi aiutarmi a risolvere il problema :confused:
seguendo la teoria come faccio a a inviarla come ISO-8859-1
No ancora alt: perché "à" la converte in "%EF%BF%BD"????
Guarda ... stasera a casa, più tranquillo, vedo di capirci qualcosa. :p
Ehm ... avevo fatto casino io, encodeURIComponent lo stavo usando in una pagina che dichiarava il charset UTF-8 ma le stringhe le stavo scrivendo secondo il charset ISO-8859-1. :doh:
Allora suggerirei questo: i dati del POST (valori o anche i nomi, dipende) li converti con encodeURIComponent. Poi dal lato PHP bisogna vedere cosa ci devi fare. Se, per dirne una, dovessi fare una query su un database che usa la codifica UTF-8, allora ti servono in UTF-8 e non riconvertiti in ISO-8859-1. Altrimenti li riconverti con utf8_decode.
La risposta lato client la dovrai avere ISO-8859-1.
AlexCyber
21-06-2007, 21:21
Prova a fare un bell'
header("Content-type: text/html; charset=ISO-8859-1");
nel file php chiamato attraverso ajax.
ho provato ma non funzia:muro:
Prova a fare un bell'
header("Content-type: text/html; charset=ISO-8859-1");
nel file php chiamato attraverso ajax.
A me funziona perfettamente. Grazie mille :D
Non basta usare à è eccetera?
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.