しかし日本人にとって、日本語を処理できることは、強く要望される機能でした。ここでいう日本語処理とは、単なる日本語の表示だけでなく、以下のような日本語特有の事情を解決するための処理などです。
- 複数の文字コード処理(入出力を含む)
- 日本語メール処理
- 半角・全角変換
- かな・カナ変換
- マルチバイトに起因する文字長の問題
- 携帯の絵文字などの外字コード処理
前置きが長くなりましたが、これらを解決するために日本人の手によって作成されたのが、 jstringエクステンションです。これが、他のマルチバイト言語にも対応するとともに、 mbstringエクステンションと改名されました。
もう一方で、海外(主に欧米)の人たちが、ソフトウェアを国際化したいというニーズがありました。そのため、日本語を含む多くの文字コード間を変換できる、iconvライブラリ(libiconv)が開発されました。そして、これをPHPに取り入れるためのiconvエクステンションが開発されました。
このように同じ機能をもった二つのエクステンションがありますが、これらのメリットとデメリットはどこにあるのでしょうか。その違いをまとめたら、以下のようになります。
- 複数の文字コードに対応しているか?
mbstring、iconvとも、多くの文字コードに対応しています。それぞれが対応しているコードは、mbstringマニュアル、libiconvのWebサイトを参照してください。
しかしながら、iconv関数はかなり「厳格」に文字コード変換を行うため、外字などを含めた、日本語で使われるすべての文字コードに対応している訳ではありません。この外字領域には携帯電話の絵文字などが入っているため、それらを扱う場合はmbstringエクステンションの-winコード(SJIS-win、eucJP-win)を使用するか、Unicodeを利用するのが良いでしょう。
- 日本語特有の処理に対応しているか?
先ほどの全角・半角変換や、かな・カナ変換は、日本語に特有の機能です。これらは当然iconvエクステンションでは対応されておらず、mbstringエクステンションを使わざるを得ません。
- 日本語メール処理に対応しているか?
mbstringエクステンションではmb_send_mail関数が用意されており、日本語のメールを比較的容易に送信できます。iconvエクステンションでは同様の関数は用意されていませんが、PEAR::Mail_Mimeなどを使用することで、同様の処理を行うことは可能です。
- 標準的なLinuxディストリビューションに対応しているか?
多くのディストリビューションでは、iconvエクステンションはサポートされていますが、mbstringエクステンションはパッケージとして用意されていなかったり、標準状態では組み込まれていなかったりします。これは、mbstringエクステンションのサイズが比較的大きく、使わない人にとってはメモリ上のムダ領域にしかならないためだと推測します。
ここまで駆け足で比較してきました。これらの2エクステンションの特徴から、Unicodeで統一されたサイトの場合はiconvを、SJISや携帯電話の対応が必要なサイトはmbstringを使うことをオススメします。
この記事は、アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。
同サイトでは、他にもPHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座など、PHP開発者をサポートする情報を掲載しています。