Quelle est la différence entre iconv()
et mb_convert_encoding()
en PHP? Est-ce que l'on fonctionne mieux, plus rapidement, etc. (par exemple avec des encodages spécifiques)? Dans quelles situations serait-on préféré à l'autre?
Voici ce que je pense savoir déjà:
iconv ()
mb_convert_encoding ()
HTML-ENTITIES
, conversion vers et depuis les codes hexadécimaux Web.Y a-t-il d'autres différences?
iconv()
est juste un wrapper autour de la fonction iconv()
trouvée dans la bibliothèque système C où PHP est en cours d'exécution (à moins que PHP soit construit avec GNU iconv, auquel cas GNU iconv est utilisé). Ainsi, les performances et les fonctionnalités de iconv()
dépendent de l'endroit où vous exécutez PHP et de la façon dont il est construit.
L'implémentation de mb_convert_encoding()
, d'autre part, est incluse dans la source PHP (module). Il comprend une bibliothèque appelée libmbfl qui gère la conversion réelle. Ainsi, cela fonctionne de la même manière, peu importe où vous exécutez PHP. Il y a une liste des encodages pris en charge ici: http://php.net/manual/en/mbstring.encodings.php
Donc, en résumé, je suppose que vous pourriez dire que mb_convert_encoding()
est plus fiable à utiliser si vous souhaitez prendre en charge différentes plates-formes. Cependant, si vous utilisez iconv()
sur Linux (par exemple), il prend en charge beaucoup plus d'encodages (voir iconv --list
).
La performance relative des fonctions dépend également de l'implémentation spécifique de iconv()
, évidemment.
Depuis PHP 5.4 il y a un bug. Parfois, iconv renvoie une chaîne nulle au lieu de renvoyer une chaîne avec un caractère "similaire".
Vous devez donc utiliser mb_convert_encoding.