web-dev-qa-db-ja.com

PHPのiconv()とmb_convert_encoding()の違いは何ですか?

PHPのiconv()mb_convert_encoding()の違いは何ですか?より良い、より速いなどを実行しますか(例えば、特定のエンコーディングで)?どのような状況で、一方が他方よりも優先されますか?

ここに私がすでに知っていると思うものがあります:

iconv()

  1. pHPのほとんどのインストールに含まれています。
  2. 新しい文字セットにマッピングできない文字が見つかった場合、それらを「類似」文字に変換するか、無視するかを指定できます。

mb_convert_encoding()

  1. 通常、php-mbstring拡張機能をインストールする必要があります。
  2. HTML-ENTITIESを処理し、Web 16進コードとの間で変換できます。

他に違いはありますか?

52
T. Brian Jones

iconv()は、PHPが実行されているシステムCライブラリにあるiconv()関数の単なるラッパーです(PHPが_でビルドされている場合を除く)GNU iconv。この場合、GNU iconvが使用されます)。したがって、iconv()のパフォーマンスと機能は、PHPを実行している場所とその構築方法に依存します。

一方、mb_convert_encoding()の実装は、PHP(モジュール)ソースに含まれています。実際の変換を処理するlibmbflと呼ばれるライブラリが含まれています。したがって、PHPを実行している場所に関係なく同じように動作します。サポートされているエンコードのリストはここにあります: http://php.net/manual/en/mbstring.encodings.php

したがって、要約すると、異なるプラットフォームをサポートする場合は、mb_convert_encoding()を使用する方が信頼性が高いと言えます。ただし、(たとえば)Linuxでiconv()を使用すると、より多くのエンコードがサポートされます(_iconv --list_を参照)。

関数の相対的なパフォーマンスは、明らかに特定のiconv()実装にも依存します。

28
pelle

PHP 5.4にバグがあります。時々、iconvは 'similar' charの文字列を返す代わりにnull文字列を返します。

したがって、mb_convert_encodingを使用する必要があります。

2
webshaker