2011-11-22 21 views
47

¿Cuál es la diferencia entre iconv() y mb_convert_encoding() en PHP? ¿Funciona uno mejor, más rápido, etc. (por ejemplo, con codificaciones específicas)? ¿En qué situaciones se preferiría uno sobre el otro?¿Cuál es la diferencia entre iconv() y mb_convert_encoding() en PHP?

Aquí es lo que creo que ya sé:

iconv()

  1. incluido con la mayoría de la instalación de PHP.
  2. cuando se encuentran los caracteres que no se pueden asignar al nuevo juego de caracteres, puede especificar si se convierten en un carácter "similar" o si se ignoran.

mb_convert_encoding()

  1. por lo general requiere la instalación de la extensión php-mbstring.
  2. es capaz de manejar HTML-ENTITIES, convirtiendo ay desde códigos hexadecimales web.

¿Hay otras diferencias?

+0

Relacionado: http://stackoverflow.com/questions/4050754/iconv-or-mbstring –

+0

No se puede decir si alguna de esas funciones le presentará un problema porque no compartió en qué momento problemas concretos * que ejecuta. Como con cualquier tipo de función, solo hace un cierto trabajo. Por lo tanto, siempre tendrá problemas si utiliza la función incorrecta para el trabajo. – hakre

+8

Esta es una pregunta sobre el tema y útil. El OP no preguntó acerca de su situación específica y luego no proporcionó detalles para determinar la función preferida en su situación; más bien, pidió información sobre la diferencia entre dos funciones PHP que parecen realizar la misma función.Lo cual, por supuesto, plantea la pregunta: ¿por qué ambos existen, y en qué situaciones uno sería preferido sobre el otro? Tiene un alcance específico y una amplia aplicabilidad (cualquier persona que haga conversiones de caracteres en PHP querría saber esto). La pregunta no debería haber sido cerrada como "no constructiva". – Josh

Respuesta

25

iconv() es solo una envoltura alrededor de la función iconv() que se encuentra en la biblioteca del sistema C donde se ejecuta PHP (a menos que PHP esté construido con GNU iconv, en cuyo caso se usa GNU iconv). Por lo tanto, el rendimiento y las características de iconv() dependen de dónde esté ejecutando PHP y cómo está construido.

La implementación de mb_convert_encoding(), por otro lado, está incluida en la fuente de PHP (módulo). Incluye una biblioteca llamada libmbfl que maneja la conversión real. Por lo tanto, funciona igual independientemente de dónde esté ejecutando PHP. Aquí hay una lista de codificaciones compatibles: http://php.net/manual/en/mbstring.encodings.php

Por lo tanto, en resumen, creo que podría decirse que mb_convert_encoding() es más confiable si desea admitir plataformas diferentes. Sin embargo, si usa iconv() en Linux (por ejemplo), entonces es compatible con muchas más codificaciones (consulte iconv --list).

El rendimiento relativo de las funciones también depende de la implementación específica de iconv(), obviamente.

+2

[iconv] (http://php.net/manual/en/function.iconv.php) tiene las opciones '// TRANSLIT' y' // IGNORE' para tratar con caracteres no convertibles .. lea el [iconv] (http://php.net/manual/en/function.iconv.php) comenta los problemas de '// IGNORE' que harán que tu código arroje errores E_NOTICE. [mb_convert_encoding] (http://php.net/manual/en/function.mb-convert-encoding.php) solo puede eliminar caracteres inválidos con 'ini_set ('mbstring.substitute_character', 'none');' (ver [ mbstring.substitute_character] (http://php.net/manual/ru/mbstring.configuration.php)) –

+0

@Sanya_Zol Es cierto, pero eso se debe a que está utilizando la implementación de glvc iconv(). En teoría, podría funcionar de manera diferente en otras plataformas ya que [POSIX no define qué conjuntos de códigos están disponibles] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/iconv_open.html). – pelle

+1

'iconv -l' para windows – Pacerier

3

Desde PHP 5.4 hay un error. En algún momento, iconv devuelve cadena nula en lugar de devolver una cadena con un carácter "similar".

Por lo tanto, debe usar mb_convert_encoding.

+1

enlace en este error sería útil – Tebe

Cuestiones relacionadas