Newsgroup: it.comp.www.php
Titolo: Confusione charset...

Da niubbio totale mi sto imbattendo nelle problematiche relative ai charset.
Nella fattispecie non ho ben capito il nesso tra il charset dichiarato 
nell'html della pagina web e quello, ad esempio di un db mysql.
Creando un db via php di default la collation è impostata su: 
latin1_swedish_ci .
Se creato il db di cui sopra nella pagina html ho un definizione di questo 
tipo:
<meta  http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
è corretto o dovrei impostare un
<meta  http-equiv="Content-Type" content="text/html; 
charset=latin1_swedish_ci " />?
Risolto il nodo di cui sopra, ma collegato allo stesso problema, non ho 
capito come dovrei archiaviare una stringa di testo nel db.
Ho trovato diverse indicazioni sia in questo ng e su google ma non riesco a 
ricomporre i pezzi del puzzle.
Esempio, la stringa di testo, prima di inserirla nel db dovrei trattarla 
con:
$testo=mysql_real_escape_string($testo);
oppure con
$testo=htmlentities($testo);
e quando la vado a rileggere, la dovrei filtrare il risultato della query 
con
$testo = htmlspecialchars($row["testo"]) ?
Come vedete la confusione è totale... :(
Grazie per qualsiasi info in merito. 

$testo = htmlspecialchars($row["testo"]) ?
No, questo non ti serve. Tranne che se lo metti in un campo INPUT, nel
quale gli apici ti darebbero fastidio; lì devi usare AddSlashes.
Inoltre devi assicurarti che la connessione al database MySQL sia pure
lei ISO-8859-15/Latin1, con
	myql_query("SET NAMES Latin1;");
o mysql_set_charset (o come si chiama).
Molto meglio IMHO pero' sarebbe sostituire tutti i "Latin1" ed "ISO-*"
con "utf8". Non ti cambia niente, e potrebbe venirti MOOOLTO comodo.
Leonardo
-- 
Enough, enough!  But, stranger, ere we part,
Glancing farewell to each nefarious bier,
This warning would I beg you take to heart:
There is an end to e'en the worst career!

 con "utf8". Non ti cambia niente, e potrebbe venirti MOOOLTO comodo.
Ne ho provate tante... posso provare anche quesot... :).
Unica domanda, come cambio, credo a phpmyadmin, la collation del db già 
creato da latin1_swedish_ci a utf8?
Grazie ancora. 

 latin1_swedish_ci a utf8?
Se non ricordo male la collation serve solo per mantenere corretto 
l'ordinamento alfabetico. Puoi fare test anche senza cambiarla. 
L'importante e` che imposti
set names 'utf8';
subito dopo la connessione (come se fosse una select), in modo da 
comunicare in utf-8 col DB. E che cambi TUTTO (header http, meta html, 
charset dei form, ecc.)
Poi se non riesci a convertire la collation, dovrebbe bastare un backup-
drop table-create table-restore :)
Bye.

creato da latin1_swedish_ci a utf8?
Link utili:
http://www.oreillynet.com/onlamp/blog/2006/01/turning_mysql_data_in_latin1_t.html
Sistema porco:
	ALTER DATABASE TuoDatabase CHARSET=utf8;
	USE TuoDatabase;
 
	// Per ogni tabella
	ALTER TABLE tabella CHARSET=utf8;
		// Per ogni VARCHAR/TEXT/MEDIUMTEXT/...
		ALTER TABLE tabella ALTER COLUMN colonna CHARSET=utf8;
Sistema a linea di comando (NON TESTATO):
	mysqldump --opt database | tee backup.sql \
		| sed -e 's/[Ll]atin1/utf8/g' \
		| recode Latin1..utf8 \
		> new.sql && mysql database < new.sql


</html>
Leonardo cintura & bretelle



Grazie a tutti, dovrei aver risolto. 

 echo strlen('à');
Nessuna funzione di php5 tiene conto dell'utf-8. Lavorano tutte al 
massimo in iso-8859-1.
per lavorare su utf-8 ci sono le corrispondenti multibyte (che iniziano 
con mb_*)
Bye.

 ... vero che è tutto OVVIO quando LO SAI ? ;-P
Cazzarola, ho controllato ed effettivamente il manuale ufficiale non lo 
dice nel capitolo dedicato alle funzioni sulle stringhe!
Bye.