[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