[PHP-users 5029] [PATCH] improved multibyte patch for PHP 4.1.*

Masaki Fujimoto php-users@php.gr.jp
2002年1月27日 23:54:04 +0900


ふじもとです。
PHP 4対応のマルチバイトパッチ(一応最終版。これで問題なさそうなら本家に投
げてみます。多分ダメだろうけど:( )を作りましたので、よろしければお使いく
ださい。詳細は以下の通りです。
[機能]	
mbstringモジュールで補え切れなかった国際化版PHP3の機能+αを提供します。
これによりPHP4でPHP3国際化版と同様(ひょっとしたら+α)の機能を得ることが
出来ます。
- php.iniのmbstring.script_encodingディレクティブによるスクリプトエンコー
 ディングの指定
- mbstring.script_encodingからmbstring.internal_encodingへのエンコーディ
 ングの自動変換
- encodingディレクティブによる個々のスクリプトのエンコーディング指定
[使いかた]
(1) ダウンロード
 [patch]
 http://nx.dip.jp:8080/php/php-4.1.0-multibyte-20020124.patch.gz
 http://nx.dip.jp:8080/php/php-4.1.1-multibyte-20020124.patch.gz
 [tar.gz]
 http://nx.dip.jp:8080/php/php-4.1.0-multibyte-20020124.tar.gz
 http://nx.dip.jp:8080/php/php-4.1.1-multibyte-20020124.tar.gz
 [Windows版バイナリ]
 http://nx.dip.jp:8080/php/php-4.1.0-win32-mb-20020124.lzh
 http://nx.dip.jp:8080/php/php-4.1.1-win32-mb-20020124.lzh
 (廣川さんの配布してくださっているWindows版マルチバイト対応PHP4に上記
 機能を追加したものです)
 patchを使用する場合は
 % gunzip -c /tmp/php-4.1.0-multibyte-20020123.patch.gz | patch -p0
 とした後buildconfして下さい。
(2) configure
 今回のパッチに関連するconfigureオプションは以下の通りです。
 [--enable-zend-multibyte]
 configureオプションに --enable-zend-multibyte をつけるとZend Engine
 のマルチバイト対応機能が有効になります。これにより得られる機能は前回
 のパッチと同様です(encoding "Shift_JIS"; とか書くとShift_JISのスクリ
 プトをparse出来ます)。
 [--enable-mbstring]
 さらに --enable-mbstring が指定されているとphp.ini(もしくは.htaccess)
 の
 mbstring.script_encoding
 が有効になります。設定できる値はUTF-8, Shift_JIS, EUC-JP, AUTO, PASS, 
 未定義のいずれかです。未定義の場合はPASSと同様の扱いとなります。これ
 によりデフォルトのスクリプトエンコーディングを指定することが出来るよ
 うになり、またAUTOを指定するれば自動検出も可能します。
 また、mbstring.script_encodingで指定された値は各々のスクリプトに
 encoding ディレクティブ(前回のパッチ参照)を記述することによって上書
 きすることができます。
 [--enable-mbstr-enc-trans]
 さらにさらに --enable-mbstr-enc-trans が指定されているとスクリプトを
 コンパイルする段階でscript_encodingで指定された値から
 mbstring.internal_encodingで指定された値への文字エンコーディング変換
 が行われます。
(3) 使用例
 configureが終了したら通常どおりインストールを行ってください。で、例
 えばphp.iniを以下のように設定するとShift_JISで記述されたスクリプトを
 問題なく動作させることが出来ます(多分)。
 [mbstring]
 mbstring.internal_encoding = Shift_JIS
 mbstring.http_input = auto
 mbstring.http_output = Shift_JIS
 mbstring.detect_order = auto
 mbstring.substitute_character = none;
 mbstring.script_encoding = Shift_JIS
 上記の設定で、仮にEUC-JPで記述されたスクリプトが1つだけあったとする
 と、
 <?php
 encoding "EUC-JP";
 print "これはEUC-JPで書かれたスクリプト\n";
 ?>
 の様にencodingディレクティブを使用することで個々のファイルのエンコー
 ディングを指定することが出来ます。
(4) 注意事項
 [JISは未サポート]
 JISは未サポートです。といってもinput/output filterを書くだけなので対
 応はすぐ出来るはずです。スクリプトをJISで書いている人がいるとは思え
 ないので先送りしています。
 [eval()のエンコーディングに関して]
 eval()で実行されるコードのエンコーディングは
 mbstring.internal_encoding であると見なして動作します。スクリプトに
 直にeval()の中身を記述している場合は問題ありませんが、ファイルから読
 み込んだ値を実行する場合は注意してください(encodingディレクティブを
 使用するか、mb_internal_encoding()を使用すれば対応できます)。
以上、長々とすみません。問題点や疑問点とうありましたらご指摘ください。
--
藤本 真樹
アストラザスタジオ
fujimoto@studio.co.jp
fujimoto@php.net

AltStyle によって変換されたページ (->オリジナル) /