
さっきのブログ
FORMで来る値をGETでもPUTでも何でも保存するCGIを、ある実験のために作ってみるで、楽天と、gooで、トラックバックで送られてくる文字コードが違うので、困るといった話。
ロリポップは、Jcodeがはいっているので、それを使えば、大丈夫でした。
ちなみに、ウィリアムのいたずらの本家(楽天)の以下の記事で、
「<加護亜依>深夜の喫煙シーン撮られる」って、W(ダブルユー)の活動は?ハローモーニングは?
引数に
blogmei=rakkuten2
を追加して確認したところ、ファイルは、以下のようにかけたので
METHOD = POST blogmei : rakuten2 blog_name : ウィリアムのいたずら excerpt : おお、元モーニング娘。の、加護亜依さんが、たいへんなことに(@_@)このニュース<加護亜依>深夜の喫煙シーン撮られるhttp://headlines.yahoo.co.jp/hl?a=20060209-00000070-mai-sociNEWSは、飲酒で、謹慎処分だよね。。YA-YA-Yahでは、NEWSの部分カットだよね。... url : http://plaza.rakuten.co.jp/struts/diary/200602090002/ title : 「<加護亜依>深夜の喫煙シーン撮られる」って、W(ダブルユー... |
大丈夫そうですね
で、プログラムは、以下のとおり
赤字のところが、追加あるいは修正されたところです。
#!/usr/local/bin/perl use CGI; use Jcode; ################################# # 必要な変数の取得 # ################################# ##引数を取得 #POST型 read (STDIN, $qs, $ENV{'CONTENT_LENGTH'}); @qs = split(/&/,$qs); foreach $i (0 .. $#qs) { ($name, $value) = split(/=/,$qs[$i],2); $value =~ tr/+/ /; #“+”を空白 $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # %XX変換 $kekka{$name} = jcode($value)->sjis(); } #GET型 $qs = $ENV{'QUERY_STRING'}; @qs = split(/&/,$qs); foreach $i (0 .. $#qs) { ($name, $value) = split(/=/,$qs[$i],2); $value =~ tr/+/ /; #“+”を空白 $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # %XX変換 $kekka{$name} = jcode($value)->sjis(); } ################################# # カウンタ取得 # ################################# #カウンタの取得 $cntfname = "count.dat"; open(LOCK, ">" . $cntfname . ". lock"); flock(LOCK,2); if ( -e $cntfname ) { open (IN, $cntfname); $count=<IN>; close(IN); } else { $count = 0; } $count=$count+1; open (OUT, ">" . $cntfname); printf(OUT "%d",$count); close(OUT); flock(LOCK,8); close(LOCK); unlink($cntfname . ". lock"); chmod 0600,$cntfname; ################################# # ファイルに書き出し # ################################# #ファイルを作成する $outfname = "kekka_" . $count . ".txt"; # 書き込み用にファイルを開く open(OUTF, ">". $outfname ); print OUTF "METHOD = $ENV{'REQUEST_METHOD'} ¥n"; while (($key, $val) = each(%kekka)) { print OUTF "$key : $val ¥n"; } # ファイルを閉じる close( OUTF); ################################# # 返信 # ################################# #表示 print "Content-Type: text/xml¥n¥n"; print '<?xml version="1.0" encoding="iso-8859-1"?>'; print '<response>'; print '<error>0</error>'; print '</response>'; |
(上記の< > ¥は、実際には、半角です)