[PHP-users 11023] mb_output_handlerの動作について

Mashiki php-users@php.gr.jp
Tue, 22 Oct 2002 13:05:39 +0900


Mashikiです。

同じようなメールを続けて投げてしまい大変恐縮なのですが、
もうひとつ質問させてください。

php4.1.2からphp4.2.2にバージョンアップした結果、以下のコード

【問題のコード testEUC.php】
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
<?php
  header("Content-type: application/csv"); // ★
  header("Content-Disposition: attachment; filename=\"sjis.csv\"");

  $fp=fopen('euc.txt','r'); //EUCのファイルをオープン
  fpassthru($fp);
?>
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

で、4.1.2では行われていた、mb_output_handlerによるエンコーディング
変換が4.2.2では行われなくなりました。
(★の行をコメントアウトするとエンコーディング変換は行われます)
ちなみに内部エンコーディングをEUC、HTTP出力をSJISとしています。

マニュアルには、header()でContent-Typeが設定されているかにより、
charset HTTP ヘッダを設定するとは記述されているですが、
エンコーディング変換の有効/無効を左右するようには読み取れないの
ですが、どなたか情報をいただけないでしょうか。

 一応は、スクリプトの頭でアウトプットバッファリングをオフにし
自前でSJIS変換をかけて出力すればどちらでも動くスクリプトが書けるの
ですが、根本的な原因がわからず、少々不安です。


【関連するphp.ini設定】
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
 output_buffering           1 
 output_handler             mb_output_handler

 mbstring.detect_order      auto
 mbstring.http_input        auto 
 mbstring.http_output       SJIS
 mbstring.internal_encoding EUC-JP
 mbstring.substitute_character no value