【コラム】
名前空間と並ぶPHP 6の大きな変更点として、「国際化対応」があります。「ん? これまでもmbstringがあったじゃん」と思われるかもしれませんが、mbstringはあくまでもエクステンション。つまり拡張機能であって、PHP本体の機能ではありませんでした。
もちろん、我々マルチバイト文字言語圏の住人にとって、mbstring拡張は欠かせない機能です。しかし、英語圏を中心としたISO-8859-1エンコーディングしか使わない人たちにしてみれば、不要な上に不具合対応も面倒な「鬼っ子」機能でしかありません。
事実、いくつかのLinuxディストリビューションでは、PHPの公式パッケージにmbstring拡張が含まれないなんてこともしばしばでした。しかし、PHP 6からはPHP本体に国際化の機能が実装されるため、マルチバイト言語の基本的な処理に関しては、我々もより安心して利用できるようになりそうです。
さて、このPHP 6の国際化機能は、主に「ICU (International Components for Unicode)」ライブラリを利用して実装されています。ICUは、IBMが提供するUnicodeと国際化処理のためのC/C++、Java向けライブラリで、オープンソースライセンスの下で配布されています。文字エンコーディング変換、日付や通貨の書式変換、ユニコード対応の正規表現などの機能が必要なアプリケーション開発では標準的に利用されているので、既に利用経験のある開発者の方も多いでしょう。
PHP 6では、ソースコードからのビルド時に、あらかじめICUライブラリがインストールされていることが要求されます。組み込まれているICUのバージョン等は、phpinfo()関数の出力結果に表示されますので、一度確認してみるとよいでしょう。
では、PHP 6の具体的な国際化対応を見ていくことにしましょう。まず、php.iniで設定を行います。php.iniの「Unicode settings」セクションを以下のように変更した後、Apacheを再起動して設定を反映しましょう。
;;;;;;;;;;;;;;;;;;;;
; Unicode settings ;
;;;;;;;;;;;;;;;;;;;;
unicode.semantics = on
unicode.runtime_encoding = utf-8
unicode.script_encoding = utf-8
unicode.output_encoding = utf-8
unicode.from_error_mode = U_INVALID_SUBSTITUTE
unicode.from_error_subst_char = 3f
php.iniのUnicode設定に関する主なディレクティブは、それぞれ以下のような意味を持ちます。
設定が済んだら、簡単なスクリプトを動かしてみます。これまでのPHPでは、国際化対応があくまでもエクステンションのレベルで行われていたため、言語自体のもつコアな関数には、マルチバイト文字について考慮されていないものも多々ありました。例えば、文字列を構成する「文字数」を返す「strlen」は、マルチバイト文字を引数にした場合に、文字数ではなくバイト数を返してしまいます。試しに、PHP 5以前の環境で以下のスクリプトを実行してみましょう(※)。
<?php
echo strlen('こんにちは');
?>
※ スクリプトのエンコーディング、mbstring.internal_encodingは共にUTF-8
「こんにちは」は5文字なのですが、結果としては「15」が返されるはずです。この問題を回避するためには、開発者が意識してmbstring拡張の「mb_strlen」関数や、iconv拡張の「iconv_strlen」関数を使うなどの対応が必要だったのです。
一方PHP 6では、コアな関数も国際化・UNICODEに対応していますので、unicode.semanticsがonならば、strlen関数も正しく「こんにちは」を「5文字」だと認識してくれます。
| 天の川のブラックホールが小惑星を飲み込んでいる - NASAが発表 [18:08 2/10] |
| マイナビ、3月より書籍連動型のクリエイティブ・デザイン系セミナー開講 [12:00 2/10] |
| Linux Mint 12 KDE登場 [10:26 2/10] |
| Dell、重複排除により最大98%のデータ削減が可能なバックアップストレージを発売 [09:44 2/10] |
| 北大、「ポジトロン断層撮影法」による脳腫瘍の性質を診断する手法を開発 [09:40 2/10] |
|
【レポート】ドコモ、「GALAXY S II LTE SC-03D」をバージョンアップ [19:03 2/10] 携帯 |
|
恋愛したくなる!? アニメ『アマガミSS+plus』 [19:00 2/10] ホビー |
|
【レポート】CP+2012 - 発売前の「X-Pro1」の高級感に酔いしれる - 富士フイルム [18:57 2/10] 家電 |
|
インターネット、V2版を再現した「VOCALOID3 Megpoid Native」発表 [18:43 2/10] クリエイティブ |
|
[機動戦士ガンダム]新連載マンガは「サンダーボルト」 3月スタート [18:41 2/10] ホビー |