В чем разница между iconv () и mb_convert_encoding () в PHP?

В чем разница между iconv() и mb_convert_encoding() в PHP? Работает ли лучше, быстрее и т. Д. (Например, с конкретными кодировками)? В каких ситуациях предпочтительнее других?

Вот что я думаю, что знаю уже:

Iconv ()

  1. включается в большинство установок PHP.
  2. когда символы, которые не могут быть сопоставлены с новым набором символов, найдены, вы можете указать, были ли они преобразованы в «аналогичный» символ или проигнорированы.

mb_convert_encoding ()

  1. обычно требуется установка расширения php-mbstring.
  2. способен обрабатывать HTML-ENTITIES , конвертировать в и из шестнадцатеричных кодов веб-сайтов.

Существуют ли другие различия?

iconv() – это просто оболочка вокруг функции iconv() которая находится в библиотеке системы C, где работает PHP (если PHP не создан с помощью GNU iconv, в этом случае используется GNU iconv). Таким образом, производительность и функции iconv() зависят от того, где вы работаете PHP и как он построен.

Реализация mb_convert_encoding() , с другой стороны, включена в исходный код PHP (модуля). Он включает библиотеку под названием libmbfl, которая обрабатывает фактическое преобразование. Таким образом, он работает одинаково независимо от того, где вы используете PHP. Ниже приведен список поддерживаемых кодировок: http://php.net/manual/en/mbstring.encodings.php

Итак, в целом, я думаю, вы могли бы сказать, что mb_convert_encoding() более надежно использовать, если вы хотите поддерживать разные платформы. Однако, если вы используете iconv() в Linux (например), то он поддерживает намного больше кодировок (см. iconv --list ).

Очевидно, относительная производительность функций также зависит от конкретной реализации iconv() .

С PHP 5.4 появляется ошибка. Иногда iconv возвращает пустую строку вместо того, чтобы возвращать строку с похожим символом.

Поэтому вы должны использовать mb_convert_encoding.