微禄: 2009年4月アーカイブ

1.設定ディレクティブに関する簡単な説明。

 mbstring.language ------------- mbstringで使用されるデフォルトの言語を設定。

 mbstring.encoding_translation - HTTPクエリに関して、入力文字エンコーディングの検出/変換を設定。

 mbstring.internal_encoding ---- デフォルトの内部文字エンコーディングを設定。mbstring.language の後に置く必要がある。

 mbstring.http_input ----------- デフォルトのHTTP入力文字エンコーディングを設定。

 mbstring.http_output ---------- デフォルトのHTTP出力文字エンコーディングを設定。

 mbstring.detect_order --------- デフォルトの文字エンコーディング検出順序を設定。

 mbstring.substitute_character - 無効な文字を代替するデフォルト文字を設定。

 mbstring.func_overload -------- シングルバイト対応の関数をmbstring関数の対応する関数で置換(オーバーロード)。

 mbstring.strict_detection ----- 厳密なエンコーディング検出を行う。


2.EUC-JPユーザ用のphp.ini設定例

output_buffering              = Off    ; 出力バッファリングを無効に設定
default_charset               = EUC-JP ; HTTPヘッダの文字コードセットを設定

[mbstring]
mbstring.language             = Japanese
mbstring.encoding_translation = On
mbstring.http_input           = auto
mbstring.http_output          = EUC-JP
mbstring.internal_encoding    = EUC-JP
mbstring.substitute_character = none


3.SJISユーザ用のphp.ini設定例

output_buffering              = On                ; 出力バッファリングを有効に設定
output_handler                = mb_output_handler ; 出力文字エンコーディングの変換バッファを設定
default_charset               = Shift_JIS         ; HTTPヘッダの文字コードセットを設定

[mbstring]
mbstring.language             = Japanese
mbstring.encoding_translation = On
mbstring.http_input           = auto
mbstring.http_output          = SJIS
mbstring.internal_encoding    = EUC-JP
mbstring.substitute_character = none

PHPで拡張モジュールを利用するには、php.ini の設定を使用してPHP起動時にロードするか、スクリプトの中で dl() 関数を使用して動的にロードするかの2種類があります。

ここでは、php.ini を使ってmbstring拡張モジュールをロードします。

PHP拡張モジュールのDLLには、ファイル名の前に 'php_' が付いています。

ダウンロードしたzipファイルには、PHP設定ファイル php.ini のサンプルとして php.ini-dist と php.ini-recommended の2つが含まれています。パフォーマンスとセキュリティの観点から最適化された初期設定がなされているので、php.ini-recommended の使用が推奨されています。(php.ini-recommended をコピーして、php.ini とファイル名を変更して使用)


1.拡張モジュールが存在するフォルダを指定

 (ファイル名を変更した)php.ini の542行目を

 extension_dir = "./"
    ↓
 extension_dir = "c:\php\ext"

 に変更。


2.mbstring拡張モジュールのロードを指定

 php.ini の674行目を

 ;extension=php_mbstring.dll
    ↓
 extension=php_mbstring.dll

 に変更(行頭の';'を削除)。


これで、マルチバイト文字列関数が利用できるようになります。


3.動作確認用スクリプトの作成

 以下の内容を、Apacheサーバーの「htdocs」フォルダに、適当なファイル名(例えば、mbtest.php)で保存します。
 (デフォルトでは、C:\Program Files\Apache Software Foundation\Apache2.2\htdocs)

 尚、PHPスクリプトの文字エンコード、ブラウザの表示エンコードともにUTF-8として下さい。

    <html>
    <head><title>PHP-MBSTRING TEST</title></head>
    <body>

    <?php
    mb_internal_encoding("UTF-8");

    echo mb_internal_encoding();
    echo '<br />文字列の長さは:'.mb_strlen("あいうえお");
    ?>

    </body>
    </html>


4.mbstring拡張モジュールの動作確認

 ブラウザを立ち上げて、アドレス欄に「http://localhost/mbtest.php」と入力、リターンキー押下で、

 UTF-8
  文字列の長さは:5 と表示されたら、動作OKです。


注)PHPをサーバモジュールとして実行している場合は、Webサーバを再起動しないと、php.ini の設定が反映されません。Webサーバを忘れずに再起動して下さい。

PHP5と日本語処理

|

・現状のPHPでは、文字列は「シングルバイト文字」として実装されており、日本語のような「マルチバイト文字」の処理(=文字単位)には適していません。

 日本語処理は、漢字など多くの文字を表現する必要があるため、マルチバイト文字を使用して文字単位で扱えるようにする必要があります。しかも、プラットフォームや使用目的によって、複数の文字エンコーディングが存在します。(通常の利用では2バイトで日本語表現が可能ですが、EUC-JPの場合は2~3バイト、UTF-8の場合は最大6バイトが必要となることがあります)

・Webアプリケーションで日本語を正しく処理するためには、適切な文字エンコーディングを使用しなければなりません。

 1.ブラウザから送信されるデータ(HTTP入力文字エンコーディング)
 2.PHP内部文字エンコーディング
 3.PHPスクリプト文字エンコーディング
 4.DBクライアント文字エンコーディング
 5.ブラウザに送信するデータ(HTTP出力文字エンコーディング)
 6.メール送信するデータ文字エンコーディング
 など。


・PHP本体にはマルチバイト文字を正しく処理する機能はありませんが、mbstring拡張モジュールが、マルチバイト文字列処理を実行するための文字列関数を提供します。

・PHP5では日本語の場合、内部文字エンコーディングは、EUC-JP、UTF-8等が利用できます。PHPスクリプト文字エンコーディングは、Shift-JISを避け、EUC-JPかUTF-8を使用するのが安全です。


・PHP6では内部文字エンコーディングがUTF-16になると発表されていますので、今後、スクリプトを記述する際には、Unicode(UTF-16、UTF-8)を使うのが良いかもしれません。