[PHP-users 8444] Re: レスポンスヘッダを出力すると自動変換してくれない
OHTA Hideki
php-users@php.gr.jp
Fri, 5 Jul 2002 19:41:46 +0900
太田です。
At 18:12 02.7.5 +0900, 桝形 誠二 wrote:
>レスポンスヘッダを出力すると自動変換してくれない現象に
>出くわしました。
私も同じような現象がありました。
以前は問題なかったスクリプトが、Apache のセキュリティホールで
Apache 1.3.26 + php 4.2.1 になったときから文字化けが起こりました。
(たしか、updateの前は Apache 1.3.23 + php 4.1.1 という環境だったと思う)
以下のスクリプトを書いて実験してみました。
test.php
<?php
ob_start('mb_output_handler');
$res1 = mb_internal_encoding('UTF-8');
$res2 = mb_http_output('EUC-JP');
if ($_GET["header"]) {
Header("Content-type: text/html; charset=EUC-JP");
}
Header("X-Moe: himitsu");
?>
(iCab 2.8.1Jを使ってHTTPリクエスト、返答を記録)
サーバは Apache 1.3.26 + php 4.2.1 (Linux) です。
phpファイルはUTF-8で記述されています。
UAにはEUC-JPで出力するのが期待される動作です。
Connecting to localhost Port: 80
>GET /test.php?header=on HTTP/1.1
>Host: localhost
<200 OK
<Server: Apache/1.3.26 (Unix) mod_gzip/1.3.19.1a mod_bwlimited/1.0
PHP/4.2.1 mod_log_bytes/0.3 FrontPage/5.0.2.2510 mod_ssl/2.8.9
OpenSSL/0.9.6b
<Content-Type: text/html; charset=EUC-JP
<X-Moe: himitsu
(http://localhost/test.php?header=on の実際の内容はUTF-8なので文字化けする)
Connecting to localhost Port: 80
>GET /test.php HTTP/1.1
>Host: localhost
<200 OK
<Server: Apache/1.3.26 (Unix) mod_gzip/1.3.19.1a mod_bwlimited/1.0
PHP/4.2.1 mod_log_bytes/0.3 FrontPage/5.0.2.2510 mod_ssl/2.8.9
OpenSSL/0.9.6b
<Content-Type: text/html;charset=EUC-JP
<X-Moe: himitsu
(http://localhost/test.php の実際の内容はEUC-JPなので正しく表示する)
となり、前者のようにContent-Typeヘッダフィールドを出力した場合は、
UTF-8のまま変換されていませんでした。
後者では X-Moe なる謎のヘッダフィールドが出力されていますが、
期待通りに動作し、 EUC-JP で出力されます。
また、この場合でも、 Content-Type に charset パラメタが付加されています。
ということで、 mb_http_output() で出力charsetを設定している場合は
わざわざ header() を使って charset パラメタを設定する必要はないかと
思います。
--
太田 秀樹 mailto:hiji@tomeibus.com
東名バスドットコム: http://www.tomeibus.com