utf8_encode utf8 mb_convert_encoding ejemplo charset array php utf-8 character-encoding iso-8859-1 iconv

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>";