[PHP-dev 66] mbstring.cパッチ

sgk php-dev@php.gr.jp
Fri, 5 Oct 2001 01:44:42 +0900


めずらしく開発っぽいことをやりました。

PHP4.0.6の日本語環境でphpinfo()を実行すると、このページに貼ってあるPHP4や
Zendのロゴが壊れて表示されます。これは、ロゴの画像データにまで漢字コード変換
(mb_output_handler()での変換)が適用されてしまうからです。

この問題はPHP4やphpinfo()に限ったことではなく、GDで画像データを発生させる場
合にみんなが陥る問題です。FAQ的には、「mb_http_output("pass")を実行してね」
ということになるのでしょうけれど、それをいつまでも利用者に要求しつづけるのは
問題かなと思います。

以下のような仕様を考えました。

 ●mb_output_handler()による漢字コード変換は、
  header()関数によるcontent-typeの指定が行われていない
  場合にのみ、実行される。

つまり、たとえば「header("content-type:image/gif")」を実行すると漢字コード変
換は実行されないようになります。注意したいのは
「header("content-type:text/html")」を実行した場合でも漢字コード変換が行われ
ないことです。content-typeがtext/*の場合だけ特別扱いして実行しようかとも検討
しましたが、むしろこれを特別扱いしない方が便利そうです。

以上のような仕様にもとづき、mbstring.cを変更してテストしています。以下のURL
にパッチを置きました。ぜひ適用してテストしていただけると助かります。仕様につ
いてもご意見ください。このパッチはPHP4.0.6用です。1日で作ったのでテキトウで
す。あまり勉強していません。
http://ppona.com/mbstring.c.patch-php-4.0.6.txt

バイナリを出力するスクリプトに対してmb_http_output("pass")をいちいち追加しな
くていいので、海外もののスクリプトの移植が楽です。


金本茂