[PHP-dev 167] Re: [PATCH] multibyte patch for PHP 4.1.0

Masaki Fujimoto php-dev@php.gr.jp
Fri, 21 Dec 2001 10:12:08 +0900


ふじもとです。フィードバック有難うございます。

On Thu, 20 Dec 2001 20:54:51 +0900
Tomoyuki Asakawa <tom@asakawa.ne.jp> wrote:

-snip-

> つまりこのパッチは、あくまで、SJISでかかれたスクリプトの
> 2バイト目の処理をしてくれるものなんですね。
> PHP3の国際化対応に近くなることを期待してはいけない。

おっしゃるとおりです。あくまでスクリプトエンジンがマルチバイトエンコーディ
ングを正しく扱えるようにするパッチです。input/outputフィルタさえ書けば、
ISO-2022-JPやBIG5等も通るようになると思います。

逆にいえば、あくまでスクリプトエンジンに対するパッチであってPHPの動作に
は何ら影響を(良くも悪くも)与えません(以下参照)。

> 最初
> encoding "Shift_JIS";
> mbstring.internal_encoding = EUC-JP
> とやってしまいました。(PHP3と同じ)
> これは。
> mbstring.internal_encoding = SJIS
> こうしないとならないのですね。
> 
> ということは。
> 
> encoding "Shift_JIS";
> と、指定するのではなく。
> mbstring.internal_encoding
> の値にしたがって動作してくれる方が、美しいのではないでしょうか?
> 
> その方が、本家も受け入れてくれるのではありませんか?

ごもっともです:) 確かにmbstring周りの設定は結構複雑で混乱の源になりかね
ませんよね。DBのエンコーディングが噛んでくるとさらに大変そうですし。

実は、最初は僕もmbstringの設定値を読むようにしようかと考えたのですが、ご
存知の通りZend EngineはPHP専用のものではなく、汎用スクリプトエンジンとし
て使用できるようになっていて、Zend Engine自体がPHPに依存している箇所はほ
とんどありません。

といった事情から、Zend Engineがphp.iniを読みに行くのは挙動として間違って
いるかな、と考えて敢えて言語構造としてencodingディレクティブを追加してみ
たのでした。というか、実はZend Engine側からphp.iniの内容を見に行くのは
(無理ではありませんが)結構どろどろしたコードになってしまいそうなので止め
た、という事情もあります...

とはいえ、encodingディレクティブの評判があまりに悪ければ、mbstringの設定
値を読みに行く方法も検討してみます。

--
藤本 真樹

アストラザスタジオ
fujimoto@studio.co.jp