Blog de Gonzalo

Blog de programación de Gonzalo López

EXTENSIÓN ICONV EN PHP

PHP

La extensión iconv en PHP permite la conversión de cadenas entre diferentes conjuntos de caracteres. Esto es útil cuando trabajas con textos que provienen de distintas codificaciones y necesitas normalizarlos. El siguiente ejemplo convierte una cadena desde UTF-8 a ISO-8859-1:


// Cadena en UTF-8
$cadena_utf8 = 'Hola, mundo! ¿Cómo estás?';

// Convertir de UTF-8 a ISO-8859-1
$cadena_iso = iconv('UTF-8', "ISO-8859-1//TRANSLIT", $cadena_utf8);

if ($cadena_iso === false) {
    echo 'Error en la conversión.';
} else {
    echo 'Cadena original (UTF-8): $cadena_utf8';
    echo 'Cadena convertida (ISO-8859-1): $cadena_iso';
}
Explicación del código: iconv(from_encoding, to_encoding, string): from_encoding: El conjunto de caracteres de la cadena original (UTF-8 en este caso). to_encoding: El conjunto de caracteres de destino (ISO-8859-1 en este caso). string: La cadena que deseas convertir. //TRANSLIT: Intenta transliterar caracteres no compatibles en caracteres similares del conjunto de caracteres de destino. //IGNORE: Ignora caracteres que no se puedan convertir (en lugar de generar un error). Ejemplo con detección de errores. Se puede verificar si una conversión falla y manejarlo:

$cadena_utf8 = 'Hola, mundo! ¿Cómo estás?';

// Convertir de UTF-8 a ASCII (puede fallar con caracteres especiales)
$cadena_ascii = @iconv('UTF-8', "ASCII//TRANSLIT", $cadena_utf8);

if ($cadena_ascii === false) {
    echo 'La conversión falló.';
} else {
    echo 'Cadena convertida a ASCII: $cadena_ascii';
}
Ejemplo avanzado con múltiples conversiones. Imaginaos que necesitais convertir datos entre varias codificaciones:

// Texto original en UTF-8
$texto_original = '¡Hola! Esto es un ejemplo de conversión.';

// Convertir a ISO-8859-1
$texto_iso = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $texto_original);
echo 'ISO-8859-1:' . $texto_iso;

// Convertir a ASCII
$texto_ascii = iconv("UTF-8", "ASCII//TRANSLIT", $texto_original);
echo 'ASCII: $texto_ascii';

// Convertir de vuelta a UTF-8
$texto_utf8 = iconv('ISO-8859-1', 'UTF-8', $texto_iso);
echo 'De vuelta a UTF-8:' . $texto_utf8;
A tener en cuenta:
  • Si el conjunto de caracteres de la cadena no coincide con el especificado en from_encoding, la conversión podría generar errores o resultados inesperados.
  • Asegúrate de que las codificaciones utilizadas sean compatibles con el texto.
Si no estás seguro del conjunto de caracteres de una cadena, puedes usar mb_detect_encoding para detectarlo:

//Cadena
$cadena = 'Hola, ¿qué tal?';
$encoding = mb_detect_encoding($cadena, 'UTF-8, ISO-8859-1, ASCII', true);
echo 'La cadena está en:' .  $encoding;
Hay una función en php que hace lo mismo que iconv que es la función mb_convert_encoding

Compartir en twitter