2012-02-29 10 views
8

cuando tiene un conjunto de caracteres diferente de UTF-8 y necesita ponerlo en formato JSON para migrarlo a un DB, hay dos métodos que se pueden usar en PHP, llamando a utf8_encode() e iconv() . Me gustaría saber cuál tiene mejor rendimiento y cuándo es conveniente usar uno u otro.iconv() vs. utf8_encode()

Respuesta

14

cuando se tiene un conjunto de caracteres diferente de UTF-8

Nop - utf8_encode() es adecuado única para la conversión de una cadena ISO-8859-1 a UTF-8. Iconv proporciona una gran cantidad de codificaciones de origen y destino.

Rendimiento, no tengo idea de cómo funciona utf8_encode() internamente y qué bibliotecas utiliza, pero mi predicción es que no habrá mucha diferencia, al menos no en cantidades "normales" de datos en los bytes o kilobytes . Si tiene dudas, haga un punto de referencia.

que tienden a utilizar iconv() porque es más claro que hay una conversión del juego de caracteres de A a B. conjunto de caracteres

Además, iconv() proporciona un control más detallado sobre qué hacer cuando encuentra datos no válidos. Agregar //IGNORE al conjunto de caracteres objetivo hará que caiga silenciosamente los caracteres no válidos. Esto puede ser útil en ciertas situaciones.

+0

también se puede utilizar // trasnlit para generar este tipo de conversión u \ 00f, que java decodificar automáticamente a la norma ISO-8859-1. pero no estoy seguro si va a suceder lo mismo si hay diferentes conjuntos de caracteres que se codificaron para utf-8. –

+0

Tenga en cuenta que PHP> = 5.4.0 ahora fallará en los caracteres no válidos, incluso con el indicador '// IGNORE': https://bugs.php.net/bug.php?id=61484 – dotancohen

0

Le recomiendo que escriba su propia función. Será de 2-3 líneas de longitud y será mejor que luchar con problemas de configuración regional, iconv, etc.

Por ejemplo: Fix Turkish Charset Issue Html/PHP (iconv?)

+0

¿Y si el autor quiere un enfoque donde no conoce todos los caracteres de entrada posibles? –

Cuestiones relacionadas