Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

simbolo euro, ISO-8859-1 -> UTF-8

653 views
Skip to first unread message

Sandro kensan

unread,
Jun 22, 2013, 1:02:07 PM6/22/13
to
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

Sandro kensan

unread,
Jun 22, 2013, 1:13:38 PM6/22/13
to
On 06/22/2013 07:02 PM, Sandro kensan wrote:
> Ho il database mysql con il setchar latin swedish ci che dovrebbe essere
> 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.

Sandro kensan

unread,
Jun 22, 2013, 3:35:37 PM6/22/13
to
On 06/22/2013 07:13 PM, Sandro kensan wrote:
> On 06/22/2013 07:02 PM, Sandro kensan wrote:
>> Ho il database mysql con il setchar latin swedish ci che dovrebbe essere
>> 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.

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.

Leonardo Serni

unread,
Jun 22, 2013, 5:57:19 PM6/22/13
to
On Sat, 22 Jun 2013 19:02:07 +0200, Sandro kensan <ken...@kensan.it> wrote:

>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.

Strano, perché quel simbolo AFAIK c'e' in ISO-8859-15, non in ISO-8859-1. Ma
se mi dici che in ISO-8859-1 ti funziona...

>Ora se il testo estratto dal database è $text e lo stampo con un echo
>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.

Sandro kensan

unread,
Jun 22, 2013, 7:09:19 PM6/22/13
to
On 06/22/2013 11:57 PM, Leonardo Serni wrote:

> Mi dici cosa ottieni, estraendo dal database
>
> SELECT HEX(campo)...
>
> supponendo che con
>
> SELECT campo
>
> 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.
0 new messages