アプリ版:「スタンプのみでお礼する」機能のリリースについて

HTMLフォームの、name=aのテキストボックスに「あ」と入力しCGIにSubmitすると、a=%82%A0とバイトコードに変換されわたされますよね
受け側のCGIで下記の様にそのパラメータを$aに代入すると、$aには「あ」となって代入されるのですが、あえて「あ」ではなくバイトコードの「%82%A0」で代入するようにするには、どうしたらよいのでしょうか?

#!/usr/local/bin/perl

require 'cgi-lib.pl';
require 'jcode.pl';
&ReadParse;

$a=$in{'a'};

A 回答 (2件)

回答ではありませんが、


「あ」を「%20%A0」に変換するというのではだめでしょか

$a = "あ";
$a =~ s/([^a-zA-Z0-9*\-.@_])/sprintf("%%%02X", ord($1))/eg;
$a =~ s/%20/+/g;
print $a;
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
送信時エンコードしたものを受取ってデコードしたあと、もう一度エンコードするのですね。
なるほど使えます。・・・しかし結構むずかしい質問だったのかな?受取ったあとデコードしないというのは

お礼日時:2005/01/07 12:50

こんばんわ。




cgi-lib.plはフォームデコード用のライブラリですから、
それを通してデコードされるのは普通の動作ですよね。

自分でデコードというか、受取データを処理しましょう。
(それか再エンコードする。)

#まず、POSTかGETかを判定します。
#次に、フォームから送られてくるデータを取得して、
#バッファに入れます。
if ($ENV{'REQUEST_METHOD'} eq "POST")
{
if ($ENV{'CONTENT_LENGTH'} > 51200) {exit;}
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} elsif ($ENV{'REQUEST_METHOD'} eq "GET") {
$buffer = $ENV{'QUERY_STRING'};
}

#受取ったデータをフォーム毎に分割し連想配列に入れる。
@pairs = split(/&/,$buffer);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$FORM{$name} = $value;
}


それでは。
    • good
    • 0
この回答へのお礼

うぁ!cgi-lib.plの偉大さを知らされますね!
親切にコメントまで書いてくれてるのに、なんとのぉ~しかわからんぞ、
とりあえず#1の人の回答で乗り切り、時間のあるときにこの方法試してみます。ありがとうございました。

お礼日時:2005/01/07 16:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!