Facciamo qualche premessa, perché la questione dei charset/encoding è sempre abbastanza delicata.Originariamente inviato da Morfryn
Allora, ho un problema con un sito cui sto lavorando.
Nella versione online non ho assolutamente alcun problema di codifica caratteri, nei meta dichiaro il formato iso-eccetera eccetera, mentre in locale si ostina a mantenere la codifica di default a utf-8, con il risultato di avere i simpaticissimi rombini guarniti di punto di domanda al posto dei suddetti caratteri.
Questa cosa succede sia su firefox che su opera, passando per iexplorer 6 e 7.
Il sistema operativo é linux. Non riesco a capire, la codifica nei suddetti browser non é imposta, se vado in internet la versione online la visualizzano bene.
Il database é mysql, con codifica utf-8 per quanto riguarda il database in generale, poi ogni cella della tabella ha come codifica latin-swedish eccetera eccetera (l'iso-eccetera di cui prima).
Mi manca qualche modulo? Cosa posso fare per dargli in pasto la codifica corretta anche in locale?
Come interpretare i byte presenti in una pagina web dipende esclusivamente dal charset/encoding dichiarato in testa al HTML (e chiaramente il browser deve supportare tale charset/encoding).
Se è dichiarato un charset ISO-8859-1, ad esempio, allora posso scrivere sulla pagina direttamente i byte con i codici relativi ai caratteri speciali di questo charset.
Se lato PHP gestisco un DB che contiene caratteri in UTF-8, è chiaro che NON posso buttare direttamente sulla pagina la stringa presa dal DB.
Quindi: o dichiaro nella pagina il charset UTF-8 (se non ci sono altri problemi) e quindi posso scrivere direttamente la stringa (a parte encodare le solite 5 entità base relative a < > & " ') oppure devo traslare un carattere UTF-8 in ISO-blabla, cosa che non è l'ottimale perché non è detto che esista una "traduzione" del carattere.
L'altra possibilità in PHP è usare htmlentities(), passando la stringa e il charset della stringa (UTF-8) per ricevere così una stringa in cui tutti i caratteri speciali sono stati convertiti nelle rispettive entità. In questo modo la stringa risultante posso scriverla su una pagina indipendentemente dal charset dichiarato.