#!/usr/bin/perl use Jcode; &getformdata ; #$form{'text'} =~ s//\>/g; #$form{'text'} =~ s/\'/\\\'/g ; #$form{'text'} =~ s/\"/\\\"/g ; # XSS(゚听)イラネ $flag = 0 ; if( $form{'text'} ne ''){ @line = split( /(\r\n|\n|\r)/, $form{'text'}) ; $num = @line ; for( $i=0; $i<$num; $i++){ #BEGIN:VBODYからEND:VBODYまでがデコード対象 if( index( $line[$i], 'BEGIN:VBODY')>=0){ $tmp = '' ; # \n だけの行の次からが本文。 # 出力はShift_JISにするので、ISO-2022-JPを変更しとく while( $line[$i]ne""&&$i<$num){ if( $line[$i] eq 'CHARSET=ISO-2022-JP'){ $line[$i] = 'CHARSET=Shift_JIS' ; } $i++ ; } $i++ ; $j = $i ; # "="で行が終わる場合は次の行へ本文が続くことを表す # ・・・けど、END:VBODYが現れるまでは本文であると見なしてしまおう while( $line[$i]ne"END:VBODY"&&$i<$num){ $tmp .= $line[$i] ; $tmp =~ s/=$// ; $line[$i] = '' ; $i++ ; } $tmp =~ s/\n|\r//g; $tmp =~ s/=([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; Jcode::convert(\$tmp, "sjis"); $line[$j] = "\n\n" . $tmp ; $line[$i-1]="\n" ; } } # print "Content-type: text/x-vmessage\n\n" ; # x-vmessageだとIEはダウソダイアログになってくれないな # print "Content-type: text/plain\n\n" ; print "Content-type: application/octet-stream\n\n" ; # 保存のダイアログをようやって出せるんだよヽ(`Д´)ノウワァン foreach (@line){ print "$_" ; } } else { print "Content-type: text/html\n\n\n" ; print "vmg Converter\n" ; print "\n" ; print "
\n" ; print "$form{'text'}
\n" ; print "
変換したいvMessageの中身をハリコ

" ; print "
ソ\ース\n" ; } sub getformdata{ local ($formbuf, $name, $value, @form); if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $formbuf, $ENV{'CONTENT_LENGTH'}); } else { $formbuf = $ENV{'QUERY_STRING'}; } foreach (split(/&/, $formbuf)) { ($name, $value) = split(/=/); $value =~ tr/+/ /; $value =~ s/%(..)/pack("C", hex($1))/eg; $value =~ s/[^\x0D\x20-\xFF]//g; $form{$name} = $value; } }