• ベストアンサー

クッキー読み込むと漢字文字列が文字化け、対策は?

クッキーに漢字文字列 $c_inputwords を書き込んだ場合、cookie ファイルには正しく書き込まれているのですが、読み込むと文字化けしてしまいます。 エンコード、デコードしてもうまく行きません。やり方がたぶん間違っているのだと思いますので、どなたか正しい書き方・読み方を教えて下さい。 本にはApache2 とWin の間だけで発生するトラブル、と書かれていました。 ##### クッキー読み込み ########## @pairs = split(/\;/,$ENV{'HTTP_COOKIE'}); foreach $pair(@pairs) { ($cname, $hisITEMs, $fSizeData, $stichwort, $dic_current, $mojiZOOM, $c_inputwords ) = split(/\=/,$pair); $cname =~ s/ //g; $fSizeData =~ s/ //g; $dic_current =~ s/ //g; $c_inputwords =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg; ## デコード } ####### クッキー書き込み準備 ########## $c_inputwords =~ s/(\w)/sprintf("%%%02X", unpack("C", $1))/eg; ## エンコード $c_line = $hisITEMs . "\=" . $fSizeData . "\=" . $stichwort . "\=" . $dic_current . "\=" . $mojiZOOM . "\=". $c_inputwords; $c_line = "KDIC=$c_line\; expires=Wednesday, 1-Jan-2020 00:00:00 GMT"; ###################################### print <<EOD; Content-type: text/html; charset=sjis-jp; Set-Cookie: $c_line <HTML><HEAD> --- --- EOD

質問者が選んだベストアンサー

  • ベストアンサー
  • feininger
  • ベストアンサー率41% (74/180)
回答No.2

\wと\Wの間違いが原因なのでは? 誤:$c_inputwords =~ s/(\w)/sprintf("%%%02X", unpack("C", $1))/eg; ## エンコード 正:$c_inputwords =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; ## エンコード

tonka729
質問者

お礼

あっそうでした!お恥ずかしい。あれでは正反対の意味になっていました。ご指摘どうもありがとうございました。正規表現の知識があやふやなのでうっかりしました。

その他の回答 (1)

noname#25358
noname#25358
回答No.1

 クッキーは場合によって漢字を巧く扱えないことがあります。  なので、URL形式のまま読み書きするか、必要になるごとにURL形式に変換した方がいいですよ。

関連するQ&A