• 締切済み

日本語でクッキーを読み書きしたいんですが。

初心者用の文献読むのですが、クッキーはカウンターの説明ばかりで、日本語を扱えません。 また、クッキーの解説HPでは、 >CGI(Perl)でエンコードするには次のようにします。 >$xx =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; >CGI(Perl)でデコードするには次のようにします。 >$xx =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg; と、書いてあるのですが、どこを書き換えればいいのでしょうか。ぜひご伝授をお願いします。 なお、只今改造中のソースは以下のURL掲載に掲載されております。 http://softplaza.biglobe.ne.jp/text/cgi/cgi13/cgi13-4.html

  • CGI
  • 回答数1
  • ありがとう数1

みんなの回答

  • inoue64
  • ベストアンサー率29% (334/1115)
回答No.1

$xxにエンコードやデコードしたい文字列を入れて、 処理を実行すると、 $xxに処理済の文字列が入ると思います。 別の変数を変換する場合は、最初の$xxを書きかえればいいと思います。 例: $hizuke

参考URL:
http://tohoho.wakusei.ne.jp/wwwcook.htm

関連するQ&A

  • データをCGIに渡す形式に変換する。

    中に入れ子で別のCGIが入っているCGIを考えました。 <iframe ・・・ action="入れ子.cgi?data1=なんたら&data2=かんたら"></iframe> みたいな感じです。 data1とdata2は親のCGIで考えて入れ子のCGIに渡します。 ところでCGIにマルチバイト文字を渡す場合は、何らかの処理をして  %([a-fA-F0-9][a-fA-F0-9]) の形式に変換されます。 これを元に戻す方法が  =~s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; であることは分かったのですが、ならば元の文字列を  %([a-fA-F0-9][a-fA-F0-9]) に変換する方法が  =~s/[^a-fA-F0-9]/unpack("H2", $1)/g; かと思いきや、うまく動きません。 どのように式を書けばいいのでしょうか? #! usr/bin/perl -d use utf8; binmode(STDOUT,'utf8'); our %in=(textfield=>'テスト',submit=>'送信'); foreach(keys %in) { my $unpack=$in{$_}; my $unpack=~s/[^a-fA-F0-9]/unpack("H2", $1)/g; my $pack=$unpack; $pack=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; print "$_ &nbsp; $in{$_} &nbsp; $unpack &nbsp; $pack <br>\n"; }

    • ベストアンサー
    • Perl
  • フォームデコード

    よく見かける $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; というやつの pack("C", hex($1)) を chr($1) にした方がいい と思ったんだけど、chr($1) のソースは見たことがないです。 chr($1) にするとうまくいかない場合があったりするんですか?

    • ベストアンサー
    • CGI
  • UTF-8から送信されたデータを日本語化するには?

    %E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A これを あいうえお に変換するには、どのようにデコードすればいいのでしょうか? ご教授お願いします。m(_ _)m [現在のソース] $buffer = $ENV{'QUERY_STRING'}; @pairs = split(/&/,$buffer); foreach $pair (@pairs){ ($name, $value) = split(/=/, $pair); $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; my $value = Jcode::convert($value, 'utf8'); $FORM{$name} = $value; } ↓ 「縺ゅ>縺・∴縺・」が検出されます。

    • ベストアンサー
    • Perl
  • クッキー読み込むと漢字文字列が文字化け、対策は?

    クッキーに漢字文字列 $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

    • ベストアンサー
    • Perl
  • デコード処理部分のプログラムについて

    デコード処理部分のプログラムで分からないトコがあるので教えてください。 $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'euc'); この『pack("C", hex($1))』、『eg』の部分の意味がよく分かりません。 『&jcode'convert(*value,'euc');』の部分も微妙なので、お願いします。

    • ベストアンサー
    • Perl
  • 半角スペースが有効にならない。

    前のページで入力された値を取得するCGIですが、どうしても半角スペースを認識しません。 それどころか、半角スペースの後ろを一切消してデータを取得しています。 同じように作成したものはきちんと動いているのに…。 どこが間違ってるかご指摘お願いします。 ---------- #!/usr/local/bin/perl read(STDIN,$buffer,$ENV{'content_length'}); @atai = split(/&/,$buffer); foreach $atais(@atai){ ($key, $value) = split(/=/, $atais); $FORM{$key}=$value; } $buffer =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $buffer =~ tr/+/ /; $value =~ tr/+/ /; $key =~ tr/+/ /; print "Content-type:text/html\n\n"; print "$key<BR>\n"; print "<A HREF=./***.cgi>Back</A><BR>\n"; open (FH,">***.log"); @filew="$buffer\n"; print FH @filew; close(FH); exit; ---------- 以上です。よろしくお願いします。

    • ベストアンサー
    • CGI
  • PerlプログラムをPHPで書き直しています

    Perlで作ったものをPHPで書き直しています。 似てるようで大変ですね。 $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; という表現ですが、これをPHPで書き直すとズバリどのように なりますか? ちなみにPERLのソースコードでは、このあと &jcode'convert(*value,'sjis'); になるのですが、PHPでPerlのこの変換を実現する一般的方法が あったら教えてください。その方法で全部書き直そうと思います。

    • ベストアンサー
    • PHP
  • クッキー書き込みが正常に行われない?

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=394703 を質問していたものです。 1.フォームで名前を入力 2.1の情報をクッキーに書き込み ということをやりたいのです。 (応用いたしますが、基本はこれです。) 1つ目のcgiで、フォームで名前を入力。 -----1.cgi-------------------- #!/usr/local/bin/perl print "Content-type:text/html\n\n"; print "<form method=post action=2.cgi>\n"; print "<input type=text name=name></input><BR>\n"; print "<input type=submit value=ok></input><BR>\n"; print "</form>\n"; exit; ------------------------------ 1.cgiの名前のデータを呼び込もうとしてもエラーになる。 -----2.cgi-------------------- #!/usr/local/bin/perl read(STDIN,$atai,$ENV{'content_length'}); ($key, $value) = split(/=/, $atai); $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; print &setCookie("name",$value); print "Content-type:text/html\n\n"; print "名前:<FONT COLOR=RED>",$value,"</FONT>と送信されました。<br>\n"; #Cookie書き込み。 sub setCookie{ local($tmp,$val); $val = $_[1]; $val =~ s/(\W)/sprintg("%%%02X",unpack("C",$1))/eg; $tmp="Set-Cookie: "; $tmp .="$_[0]=$val; "; $tmp .="expires=Thu, 1-Jan-2030 00:00:00 GMT;\n"; return($tmp); } ------------------------------ クッキー書き込みをしないで実行すると、きちんと名前が表示されます。 どこをなおせばきちんとクッキーにセットされるのでしょうか? 何度も申し訳ありませんがよろしくお願いします。

    • ベストアンサー
    • CGI
  • GETパラメータ

    こんにちは CGI初心者です。 http://www.perl-labo.org/formdata/getmethod/get.cgi?日本語 この様に、日本語のGETパラメータを取得したいです。 http://www.perl-labo.org/formdata/jpname/ を参考にしました。 【記述】 #!C:/Perl/bin/perl package plab; sub getformdata { local $rawdata; local %formdata; local @inputs; local($input, $name, $val); if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $rawdata, $ENV{'CONTENT_LENGTH'}); } elsif ($ENV{'REQUEST_METHOD'} eq "GET") { $rawdata = $ENV{'QUERY_STRING'}; } @inputs = split('&', $rawdata); foreach $input (@inputs) { ($name, $val) = split('=', $input); $name =~ tr/+/ /; $val =~ tr/+/ /; $name =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("C", hex($1))/eg; $val =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("C", hex($1))/eg; $formdata{$name} = $val; } return %formdata; } 1; 実行するとサーバーエラーになってしまいます。 パスは「#!C:/Perl/bin/perl」で合っています。 記述方法のミスでしょうか? 教えて下さい!

    • 締切済み
    • CGI
  • Encodeモジュールで日本語化したい

    今まで全てのPerlをjcode.plを使って日本語化してきました。 長年根本の構造をきちんと理解せず、jcode.plは呪文のように最初に宣言して使用してきたため、現在文字化け対策をするため、今回Encodeモジュールを使って日本語変換を行うための方法が分からず困っています。 formから送信されてきたものを変換するため、 foreach $pair(@pairs) { ($name,$value) = split(/=/,$pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; &jcode'convert(*name,'sjis'); &jcode'convert(*value,'sjis'); $in{$name} = $value;#ここは状況に応じて変えてます } として最初に一括して変換してやり、 ウェブ上で表示させるときは <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> を指定してそのまま表示、 メールなどでは &jis("Subject: $sub"); print AAA "$msg\n"; sub jis { $msg = $_[0]; &jcode'convert(*msg, 'jis'); } などとして出力してきました。 これらをEncodeモジュールを使って書き換えたいのですが、参考に http://digit.que.ne.jp/work/wiki.cgi?Perl%E3%83%A1%E3%83%A2%2F%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%AE%E6%89%B1%E3%81%84 このページを読んだのですが、perlの根本が理解できていないので、どこをどうしていいのか分かりません。 上のような形式をEncodeモジュールを使って書き換えるとすればどのようにすればいいのでしょうか。 (どう聞けばいいかも分からないので、うまく伝えられたか不安ですが)

    • ベストアンサー
    • Perl