スログ WinMX 共有日記 backslashdot.dame 工事中 工事中 工事中 工事中 工事中 工事中 はてな@最低人間 http://adultman.net/

2005年01月21日

クッキーの文字化け

 Web2Roomというものを設置してみました。 主氏のMXCCtrlを利用したWPNチャットのWebクライアントですが、 自動でうちの部屋名を指定できるようにCGIを設置してみました。

 なかなか便利なので好評なのですが、常連さんに「ハンドルネームの保存が出来るとうれしいなぁ~」 とか言われたのでクッキーを使用して保存することに。ところが何故かクッキーから読み出した情報が文字化け。何故だ。

 とりあえず色々と調べてみるとうちのWebサーバに使用している Windows版 Apache 2.x に存在するバグであることがわかりました。

 ご存知のようにクッキーというのは情報自体が保存されるのはサイトを見に来た「クライアント側」、すなわちユーザー側ですが、 それを再度使用するときはクライアント側からサーバにその情報を送信し、サーバはその情報をもとにブラウザに出力します。

 ところが Windows版 Apache 2.x では2バイトの文字を正常に処理できないらしく、 ここで文字化けが発生するわけです。

 さてどうしたもんかと思っていたところ、要するに2バイト文字をそのまま送らなければいいんだ、ということに気付いたので、 URLエンコード/デコードすることにしました。

 具体的にはクッキー保存処理の際に、クッキーに書き込む直前にまず内容を以下のようにエンコード。

$cookie =~ s/(\W)/sprintf("%%%02X", ord($1))/ego;

 こうすることで例えばSJISでエンコードした場合、

 最低人間 → %8D%C5%92%E1%90l%8A%D4

 という文字列に変換され、そのままクッキーに保存されます。あとは再びクッキーを取得して読み込む際に、

$c_name =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/ego;

 のようにURLデコードしてやればいいわけです。

 というかそういうバグがあること自体初めて知ったわけですが何か(ぇ

Posted by 最低人間@管理人 at 2005年01月21日 06:02
| コメント (0) | トラックバック | キーワードの動向 | 関連エントリ | 関連書籍 | ランキング |

この記事の関連エントリ :  CGI  Perl  Cookie  文字化け  Apache  Windows  WinMX  チャット
この記事に関連するかもしれない書籍
Comments
Post a comment









Remember personal info?






キーワード
XML & Powered
RSS1.0
コメントのRSS1.0
Powered by
Windows Server 2003
apache
Movable Type 3.2-ja-2
Copyright
このサイトの説明
Brainner