utf8 - PHP: Problemas al convertir el carácter "''" de ISO-8859-1 a UTF-8
ã php (2)
Tengo algunos problemas con el uso de PHP para convertir el contenido de la base de datos ISO-8859-1 a UTF-8. Estoy ejecutando el siguiente código para probar:
// 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);
Cuando ejecuto esto en la vista fuente de Firefox, asegurándome de que la configuración de codificación de Firefox está configurada en "Western (ISO-8859-1)", obtengo esto:
Hasta aquí todo bien. El primer resultado contiene esa cita extraña y puedo verla correctamente porque está en ISO-8859-1 y también lo está Firefox.
Después de cambiar la configuración de codificación de Firefox a "UTF-8", se ve así:
¿A dónde fue la cita? ¿No se suponía que iconv()
convertiría en UTF-8?
U + 2019 CITA ÚNICA DERECHA MARK no es un personaje en ISO-8859-1. Es un personaje en windows-1252 , como 0x92. El carácter real ISO-8859-1 0x92 es un carácter de control C1 poco utilizado llamado "Uso privado 2".
Es muy común etiquetar erróneamente los datos de texto de Windows-1252 con la etiqueta de conjunto de caracteres ISO-8859-1. Muchos navegadores web y clientes de correo electrónico tratan el juego de caracteres MIME ISO-8859-1 como caracteres de Windows-1252 para acomodar dicho etiquetado erróneo, pero no es un comportamiento estándar y se debe tener cuidado para evitar generar estos caracteres en ISO-8859-1 contenido etiquetado
Parece que esto es lo que está sucediendo aquí. Cambia "ISO-8859-1" a "windows-1252".
esto resolverá su problema, suponiendo que su charset
encabezado de página es utf-8:
// Opens a connection to a MySQL server
$connection = mysql_connect ($server, $username, $password);
$charset = mysql_client_encoding($connection);
$flagChange = mysql_set_charset(''utf8'', $connection);
echo "The character set is: $charset</br>mysql_set_charset result:$flagChange</br>";