Sto riscontrando alcuni problemi con l'utilizzo di PHP per convertire il contenuto del database ISO-8859-1 in UTF-8. Sto facendo funzionare il seguente codice di prova:PHP: problemi di conversione del carattere "" "da ISO-8859-1 a UTF-8
// Connect to a latin1 charset database
// and retrieve "Georgia O’Keeffe", which contains a "’" character
$connection = mysql_connect('*****', '*****', '*****');
mysql_select_db('*****', $connection);
mysql_set_charset('latin1', $connection);
$result = mysql_query('SELECT notes FROM categories WHERE id = 16', $connection);
$latin1Str = mysql_result($result, 0);
$latin1Str = substr($latin1Str, strpos($latin1Str, 'Georgia'), 16);
// Try to convert it to UTF-8
$utf8Str = iconv('ISO-8859-1', 'UTF-8', $latin1Str);
// Output both
var_dump($latin1Str);
var_dump($utf8Str);
Quando ho eseguito questo in vista origine di Firefox, assicurandosi impostazione di codifica di Firefox è impostato su "occidentale (ISO-8859-1)", ottengo questo:
Finora, tutto bene. Il primo output contiene quella citazione strana e posso vederlo correttamente perché è in ISO-8859-1 e così è Firefox.
Dopo essere passato ad impostazione "UTF-8", sembra che questa codifica di Firefox:
Dove ha fatto la citazione andare? iconv()
non doveva convertirlo in UTF-8?
Wow, ho fatto e vedo la U + 2019 in modalità UTF-8! Ma è sicuro usare "windows-1252" per convertire una grande quantità di dati da "ISO-8859-1" a "UTF-8"? In altre parole, tutti i caratteri ISO-8859-1 continueranno a essere convertiti correttamente? – mattalxndr
I caratteri 0x80-0x9F non verranno convertiti correttamente. Ma questi sono caratteri di controllo che non vengono quasi mai usati. – dan04
@mattalexx Se si controlla la stringa per i caratteri in quell'intervallo e ne trovi uno, è una buona scommessa che la stringa sia codificata in Windows-1252. Se ** non ** trovi caratteri in quell'intervallo, è più probabile che sia ISO-8859-1. –