Newsgroup: it.comp.www.php
Titolo: simbolo euro, ISO-8859-1 -> UTF-8

Ho il database mysql con il setchar latin swedish ci che dovrebbe essere 
l'ISO-8859-1. Le pagine php sono in UTF-8. Nel database ho anche il 
carattere euro (ï¿½) che ï¿½ visibile se lo visualizzo con phpmyadmin.
 
Ora se il testo estratto dal database ï¿½ $text e lo stampo con un echo 
utf8_encode($text), non viene visualizzato il simbolo dell'euro.
 
Se invece setto <meta content="text/html; charset=ISO-8859-1" 
http-equiv="content-type"> nella pagina php e faccio un echo $text senza 
nessuna conversione, il simbolo dell'euro viene visualizzato correttamente.
 
Ho fatto diversi tentativi con le altre funzioni per convertire il 
charset ma senza alcun risultato, mi sono letto un po' degli esempi su 
php.net
 ma non sono stati utili e/o illuminanti. Dovrebbe essere un 
problema comune ma non ho trovato la soluzione.
-- 
Sandro kensan 
www.kensan.it
 & 
www.qiqi.it
 geek site

 l'ISO-8859-1.
 
Ecco ho trovato l'inghippo che non ï¿½ spiegato chiaramente. Mysql non usa 
il charset ISO ma quello di windows lo CP1252, quindi un bel 
iconv("CP1252", "UTF-8", $data) risolve ogni problema.


 iconv("CP1252", "UTF-8", $data) risolve ogni problema.
 
Sto cercando e forse lo trovo ma sapete dirmi se esiste una conversione 
automatica della codifica dei caratteri *solo* in uscita da mysql. 
Qualche casa del tipo $row = mysql_fetch_array($ro, "convert CP1252 to 
UTF8") o analogo?
 
Ho visto che uno ha risolto il problema con una funzione di questo tipo:
 
I needed a method for recursive iconv. I didn't find one, so wrote it 
myself and I'd like to share it. Mabye someone will need it.
 
<?php
public function recursive_iconv(string $in_charset, string $out_charset, 
$arr){
         if (!is_array($arr)){
             return iconv($in_charset, $out_charset, $arr);
         }
         $ret = $arr;
         function array_iconv(&$val, $key, $userdata){
             $val = iconv($userdata[0], $userdata[1], $val);
         }
         array_walk_recursive($ret, "array_iconv", array($in_charset, 
$out_charset));
         return $ret;
     }
?>
 
Applicata a $row = mysql_fetch_array($ro) risolverebbe il problema ma 
chiedo se esiste un modo più semplice.


utf8_encode($text), non viene visualizzato il simbolo dell'euro.
 
Mi dici cosa ottieni, estraendo dal database 
 
	SELECT HEX(campo)...
 
supponendo che con
 
	SELECT campo
 
tu ottenga $text?
 
Leonardo
 
-- 
Were I Glenallan's Earl this tide, and were you Roland Cheyne,
My spur would be in my horse's side, the bridle upon his mane.
If they hae twenty thousand blades and we twice ten times ten,
Yet they hae but their tartan plaids, and we're mail-clad men.

 tu ottenga $text?
 
Posso fare la prova:
 
49 6E 74 65 72 6E 65 74 *20* 77 69 72 65 6C 65 73 73 20 74 72 61 6D 69 
74 65 *20* 63 65 6C 6C 75 6C 61 72 65 *20* 47 50 52 53 2C *20* 64 61 74 
69 *20* 65 *20* 69 6E 66 6F 72 6D 61 7A 69 6F 6E 69 2E *20* 43 6F 6E 
*20* 38 _80_
 
20736920E820696E20496E7465726E65742076696120475052532F454447452F48534450412E
 
Internet wireless tramite cellulare GPRS, dati e informazioni. Con 8€ si 
è in Internet via GPRS/EDGE/HSDPA.
 
Mi pare che il codice dell'euro sia 80 in esadecimale. Comunque sia 
funziona e la conversione da setchar windows a utf8 è ok.
