[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")をいちいち追加しな
くていいので、海外もののスクリプトの移植が楽です。
金本茂