[PHP-users 21862]Re: Content-Lengthヘッダの出力方法

Atsushi NAGAI nagai @ asahi-pj.co.jp
2004年 5月 27日 (木) 17:37:10 JST


永井です。

From: komura <komura @ ma9.seikyou.ne.jp>
Date: Thu, 27 May 2004 16:31:31 +0900
Subject: [PHP-users 21861] Re: Content-Lengthヘッダの出力方法

 | komura です。

 | ob_start() のマニュアルの例を見て、以下のようなスクリプトを作成して
 | 試してみました。
 | 
 | http://jp.php.net/manual/ja/function.ob-start.php
 | 
 | 特に問題なく動いているように見えましたが、どうでしょうか。

やあ、わざわざ試していただいて、ありがとうございます。

こちらでもうまく動作しました。
実際のコンテンツサイズと Content-Lengthヘッダの値が一致しました。

 | function callback( $contents )
 | {
 |     $contents = mb_convert_encoding( $contents, 'SJIS-win' );
 |     header( 'Content-Type: text/html; charset=Shift_JIS' );
 |     header( 'Content-Length: ' . strlen( $contents ) );
 | 
 |     return $contents;
 | }
 | ob_start( 'callback' );

なんか、mb_output_handler() が内部エンコーディングを HTTP出力
エンコーディングに変換するコールバック関数だというのを読んで、
カスタムハンドラでは、まず mb_output_handler() を呼び出して、
・・・と凝り固まってました。
mb_convert_encoding() で変換すればいいんですよね。

 | php.ini の以下の指定はコメントアウトした状態で確認しました。
 | 
 | output_handler = mb_output_handler
 | mbstring.http_input = SJIS
 | mbstring.http_output = SJIS

output_handler ははずさないとダメなようですね。
mb_output_handler を指定したままだと表示は化け化けになります。
ob_start() でエントリした callback で置き換わるわけではなく、
mb_output_handler も動いてしまうのかな。

ともかく、正常動作する 1つの解を得られました。
ありがとうございます。

# 私は今回初めてなのですが、携帯向けシステムを作っている人たちは、
# 普通にこの手のことをやってるのでしょうかね?

-- 
Atsushi NAGAI <nagai @ asahi-pj.co.jp>




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