Newsgroup: it.comp.www.php
Titolo: PHP, MySQL e charset

Ciao a tutti, ho un piccolo dubbio relativo all'uso dei charset con PHP e
MySQL.
Supponiamo che le pagine HTML/PHP su cui sto lavorando abbiano charset
8859-1 (latin1):
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Finchè una pagina PHP deve solo visualizzare dati immessi dall'utente via
form, nessun problema: anche se l'utente usa lettere accentate et similia,
queste verranno cmq codificate secondo il charset 8859-1 e in base a
questo poi correttamente visualizzate.
Mettiamo invece che io debba invece inserire (a partire da un form) dati
su un database mysql e successivamente prelevarli per visualizzarli sulla
pagina.
- Possono esserci problemi nella visualizzazione dei dati, se MySQL usa,
per immagazzinare i dati o per comunicare con PHP, un charset diverso da
quello delle mie pagine? O è del tutto indifferente?
- In caso positivo, la funzione htmlentities() risolve sempre e comunque
il problema? Cioè previene l'uso diretto di tutti quei caratteri che hanno
differenti valori su differenti charset?
Grazie molte!
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 hanno differenti valori su differenti charset?
htmlentities trasforma le accentate (e altri caratteri) di un testo in
iso-8859-1 in entita` html. Ma attento che ti cambia anche altri caratteri.
Bye.

 semplice da gestire.
Quindi mi basta impostare il charset dei singoli campi dei database a
latin1 (iso-8859-1) o devo anche cambiare il charset della connessione
mysql? (Sono due cose diverse, tant'è vero che in phpmyadmin sono
rispettivamente:  MySQL charset e MySQL connection collation).
In caso come faccio a modificare il charset della connessione?
Altra domanda: si può cambiare il charset predefinito di php? Se sì, come?
Grazie mille!


 come?
No, e` hardcoded nei sorgenti, da quanto so.
Infatti le funzioni utf_encode e decode lavorano tra iso-8859-1 e utf-8,
ignorando completamente gli altri charset.
Devi usarele estensioni mb_*() per lavorare con altri charset.
Il discorso encoding e` abbastanza vasto, e ammetto che nemmeno io l'ho
esplorato del tutto. Ogni tanto mi salta fuori qualcosa di nuovo...
Bye.

 No, e` hardcoded nei sorgenti, da quanto so.
Nel php.ini c'è una strina commentata (almeno nel mio php.ini):
;default_charset = "iso-8859-1"
Laika, prova a decommentarla e magari inserire il charset che vuoi per 
vedere l'effetto che fa.
Però attenzione, questa istruzione riguarda soltanto il fatto che se la 
attivi, da quel momento in poi (dopo aver riavviato il webserver), il 
server invierà, tra le varie intestazioni, anche l'header che specifica 
il charset.
Per usare le funzioni stringa, o usi le funzioni mb_strings o un altra 
categoria che non ricordo. :-)
--
rob4you
www.outofmind.eu

 ;default_charset = "iso-8859-1"
Parlo per ipotesi, ma credo che quello cambi solo gli header inviati da
PHP ad Apache (che poi li reinvia al client). Non penso cambi il
comportamento interno delle funzioni. Ma potrei benissimo sbagliarmi, e
sarei quasi felice di farlo, visto che potrei metterla a utf-8 e togliermi
qualche rogna, probabilmente. :)
Bye.

 qualche rogna, probabilmente. :)
Non ho provato, ma credo sia esattamente come dici tu 
(purtroppo).....:-(
--
rob4you