Newsgroup: it.comp.www.php
Titolo: mysql php e caratteri accentati

lo so che questo argomento è stato affrontato già moltissime volte, ma io 
sto impazzendo le sto tentando tutte, ho girato tutto il newsgroup, manuale, 
tutorial sul controllo dei dati provenienti da form, ma non riesco a venirne 
al capo!
Ho creato una texarea, che una volta riempita, andando a cliccare su un 
tasto submit, vado a salvarne il contenuto in una campo 
(collation:utf8_general_ci) di una tabella, chiamata messaggi, di un 
database MYSQL.
In un secondo momento vado a stampare tutti i record della tabella messaggi 
in una pagina html.
Il problema è che quando stampo i messaggi sulla pagina html i caratteri 
accentati non mi vengono visualizzati "sempre" correttamente, a volte al 
loro posto esce una A con altri simboli vicino, altre volte un ? ecc...
Dico non sempre perchè alcune volte sembra che la soluzione provata 
funziona, poi vado a reinserire lo stesso messaggio che precedentemente mi 
aveva dato buon esito, e come per magia ottengo nuovamente caratteri strani.
Credevo di risolvere il problema andando a passare il contenuto della 
textarea, prima di salvarlo nel db, alla funzione htmlelements in questo 
modo:
$messaggio=hmtlelements($_POST['messaggio'],ENT_QUOTES);
ma niente...
ho provato anche a usare htmlspecialchars al posto di htmlelements...
ho provato ad utilizzare htmlspecialchars prima di salvare il messaggio nel 
databse, e poi quando lo andavo a stampare nella pagina html utilizzavo 
htmlelements:
//prima di salvare nel database
$messaggio=hmtlspecialchars($_POST['messaggio'],ENT_QUOTES);
...
//quando stampo i record del database
$messaggio=hmtlelements($_POST['messaggio'],ENT_QUOTES);
...
ma niente...le stesse funzioni le ho provate anche impostando il campo 
charset delle stesse funzioni a utf-8...
Ho provato a cambiare il charset della pagina html in questo modo:
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
ma niente...
Ho provato ad utilizzare la funzione utf_encode in fase di salvataggio nel 
db e utf_decode in fase di stampa ma nulla
ho provato a usare solo la funzione addslashes (e striplashes)...
Ho provato a utilizzare come collation per il campo della tabella quella che 
mi dava di default mysql, latin1_swedish_ci, con la combinazione delle varie 
cose provate con collation utf8_general_ci, ma nulla
La cosa strana poi è uno stesso messaggio a volte me lo visualizza bene, poi 
se lo reinserisco quando vado a stampare i messaggi mi escono i caratteri 
accentati scombussolati.
Ho anche controllato cosa realmente mi viene salvato nel campo del database, 
sia che questo abbia collation utf8_general_ci che latin1_swedish_ci, ed in 
entrambi i casi a volte contiene il carattere così come deve essere (ad 
esempio è à ...) altre volte contiene una A con un accento a froma di tilde
Bhoo non ci sto a capire un cavolo!
Dove sbaglio?
Grazie a tutti.
CIAO 

nell'html della pagina il charset è impostato correttamente?


hmm creado di si nell'head della pagina html ho inserito la riga:
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
dovrebbe andare bene o no? 

 strani.
bha sembra che ho risolto, ho fatto in questo modo (e pure a me sembrava di 
verla già provata sta soluzione...mha forse la usavo con collation 
latin1_swedish_ci):
i campi del database hanno come collation:
utf8_general_ci
quindi prima di salvare il messaggio prelevato dalla textarea (con POST) nel 
database lo passo alla funzione htmlelements in questo modo:
$messaggio=htmlentities($_POST['messaggio'],ENT_QUOTES,"UTF-8");
In fase poi di stampa dei messaggi nella pagina html li stampo così come 
sono, senza passarli ad alcuna funzione...anzi li passo solo alla funzione 
nl2br:
$messaggio=nl2br($messaggio);
per poter trasformare i newline in tag <br>.
Ho però notato una cosa, prelevato il messaggio dal database, e inserito 
nella variabile $messaggio, se su di essa richiamamo la funzione:
echo "charset usato: ".mb_detect_encoding($messaggio)."<br>";
per farmi restituire il charset utilizzato, questa non mi restituisce UTF-8, 
ma mi restituisce ASCII, è normale?
Grazie
CIAO