[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:39014] Re: Apache1.3.26でCGIが出力する情報が文字化けする
杉浦です。
>>> In Message "[debian-users:39008] Re: Apache1.3.26でCGIが出力する情報が文字化けする"
>>> <013701c3c059$b3118cc0$8101a8c0@xxxxxxxxxxxx>,
>>> "Yamawaki" <yamawaki@xxxxxxxxx> said;
> > 今まで正しく(?)動作していた環境はどういう物なんでしょう?
> > potato から upgrade したらおかしくなったとか?
> まさにそのとおりです。旧と現在の環境は下記のとおりです。
<Snip...>
> > CGI は何で書かれた物なんでしょうか?
> CGI は peal で記述しています。
<Snip...>
> また、問題が発生している該当 CGI をコマンドラインから実行したところ、
> CGI 内では出力することを指定していないはずの
> Content-Type: text/html; charset=ISO-8859-1
> が先頭に出力されました。
なるほど。ようやく状況が分かりました。
potato -> woody の upgrade に伴って perl 付属の CGI.pm のバージョンが
上がり、自動で charset をつけるようになった(なってしまった)のが原因ですね。
具体的には CGI::header() で出力されます。このメソッドの呼び出し部分を
武藤さんの書かれたとおり
header("text/html; charset=Shift_JIS")
のようにするか、もしくは
header(-charset => "Shift_JIS")
と変更します。
> > # 個人的には perl の CGI.pm がつけてるんじゃないかと思うのですが。
> 気になったので、CGI.pm ファイルを閲覧していると、文字コードを設定してい
> る部分がありましたが、このサーバ上で CGI で出力している動的ページを
> Shift-JIS のみで出力している場合、極端な話、この部分を書き換えてしまっ
> ても構わないものなのでしょうか?
出来るだけ避けた方が良いとは思いますが、リスクを覚悟した
上なら構わないでしょう。
ともあれ、解決策は2つあります
* 全ての CGI を変更する
こちらをお勧めします。
欠点:
- 直すところが多いと面倒 (と言っても一括置換できると思いますけど)
- その CGI がお客さんの物だったりするとさわれない?
* システムの CGI.pm を書き換える
少なくとも CGI.pm を読んで、何処を変更すべきかが分かる必要があります。
charset が付かないようにすることも出来ますが、若干のセキュリティーリスク
があります。
欠点:
- また debian を upgrade したり、apt-get --reinstall したりすると
元に戻ってしまいます。
- というか、戻ることをちゃんと覚えていないと同じ事で填ります
- その CGI を別のシステムに持っていくと同じ問題を起こします
--
Tatsuki Sugiura mailto:sugi@xxxxxxxxxxxxxxxxxxxxxxxxxxx