[PHP-dev 970]Re: fgetcsv仕様変更について(wasfgetcsv

Moriyoshi Koizumi moriyoshi @ at.wakwak.com
2004年 1月 9日 (金) 00:12:16 JST


小泉です。

On 2004/01/08, at 15:39, Rui Hirokawa wrote:

> 本家MLでの議論に参加できず申し訳ありません。

お気持ちありがとうございます。
こういう議論に多勢に無勢ということはありませんから、問題ありません。

> マルチバイトに関して、
> StigやRasmusのように理解のある方が以前より増えてきてくれている気はします
> が、理解のない人もけっこうまだいるようですね。

理解がない、というよりは我々の置かれている状況がどんなものか
理解できないのでしょうね。

> PHP5はコードを実装して頂いたので大丈夫だと思いますが、まだまだPHP4は使い
> 続けられるでしょうし、困ったものです。

PHP5での改修も非常にネガティブなものです。
標準Cライブラリの関数である mbrlen を使っているのですが、
BSD系の実装もglibc系の実装も本当にひどいので、
非常にパフォーマンスが悪くなってしまっています。

(いずれの実装もただ1文字の占めるバイト数を求めるためにテーブルを
ルックアップしてユニコードに変換するという、甚だ非効率なものです。
一方で、Microsoft のものは IsDBCSLeadByte() コールを利用しているので
比較的高速と思われます。)

そのうえ、ファイル内の文字コードはロカールの設定と一致しているという想定なので、
これもロカール設定がスレッド毎でない libc だと問題を引き起こす恐れがあります。
さらにいえば、mbstring.internal_encoding の設定とは無関係に動くので、
要らぬ混乱を引き起こすかもしれません。

> 消極的な解決策としては、mb_fgetcsvを作り、mbstring.func_overloadの指定
> に基づいて関数テーブルを差し替えて、fgetcsvとして使えるようにするという
> のも考えられるかと思います。
> ただ、もちろん、PHP5と同様にmblenを使うように修正を行うのが良いと思いま
> すが。

mb_fgetcsv() を作るのはやめておきましょう。議論の中ではさんざん "mb_fgetcsv()" を
新設することを提案されたのですが、マルチバイトに対応した同等の関数をいつまでも
mbstring 内に 用意することを繰り返していたら、結局国際化という観点から
外れてしまうことになると思うのです。



PHP-dev メーリングリストの案内