Подтвердить что ты не робот

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

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

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

Iconv()

  • включенный в большинство установок PHP.
  • когда найдены символы, которые не могут быть сопоставлены с новым набором символов, вы можете указать, были ли они преобразованы в символ "похожих" или проигнорированы.

mb_convert_encoding()

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

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

4b9b3361

Ответ 1

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(), очевидно.

Ответ 2

Так как PHP 5.4 есть ошибка. Когда-то iconv возвращает пустую строку вместо того, чтобы возвращать строку с "похожим" char.

Итак, вы должны использовать mb_convert_encoding.