プロが教えるわが家の防犯対策術!

CGI_Lite.pmを使用してファイルをアップロードするCGIを書いていますが、ファイル名によっては、名前の途中までが消えてしまいます。
cgiとhtmlは、以下のとおりです。EUC、Shif-JISの両方で、また、LinuxとWindowsXPの両方で試してみました。


「可能性.txt」というファイルをアップすると、
「性.txt」というファイル名になります。

環境:
CGI_Lite.pmは、2つのバージョンを試してみました。
(1), CGI_Lite 2.02 http://search.cpan.org/~smylers/CGI-Lite-2.02/Li …
(2), CGI_Lite 1.8 http://search.cpan.org/dist/CGI_Lite/

OSなど
(1), WindowsXP + AnHTTPd + Perl5.8.8
(2), SuSE Linux + Apache2.0 + Perl5.8.3



■アップするHTML
<html>
<form action='test.cgi' ENCTYPE='multipart/form-data' method='post'>
<input type="file" name="file1">
<input type="submit">
</form>
</html>

■アップされるCGI(test.cgi)
#!/usr/bin/perl
use CGI::Lite;

my $cgi=new CGI::Lite;
$cgi->add_timestamp(0);
$cgi->set_directory('./') or die $!;
$cgi->set_platform ('Unix');
$cgi->set_buffer_size (10000);
my %in = $cgi->parse_form_data();

print"Content-type: text/html\n\n";
print"-->$in{'file1'}\n";



以上、よろしくお願いします。

A 回答 (2件)

sjisのまま扱いたいということなら、



ShiftJIS 「脳」の文字コード -OKWave
http://okwave.jp/qa3306321.html

の回答 No.2 にあるようなパターンで、ダメ文字の中に隠れている
'\' をエスケープすればうまくいきませんか?

デバッグのときなんかはいろいろ見落としがちですからね。
謝るこたないですよ♪
    • good
    • 0
この回答へのお礼

度々、ありがとうございます。

CGI_Lite.pmのソースの中で、STDINからの入力部分に、お教えいただいたリンクの回答No.2を
挿入してみました。

結論からいうと、ファイル名の「可能性.txt」は「性.txt」のままです。
ただ、<input type="text">などで送ったPOSTデータは「可能性」が「可能\性」として
変換されるので、もう少しCGI_Lite.pmを解析すればなんとかなりそうな気はしています。
Perlは(も)あまり詳しくなので、時間のあるときにでも頑張ってみようと思います。

ありがとうございました。

お礼日時:2007/11/22 16:30

EUCでも発生するというのでちとアレですが



>echo 可能性|hexdump
00000000: 89 C2 94 5C 90 AB 0A .B.\.+.

'能'がいわゆるダメ文字なんで問題起こしてるんじゃないでしょうか。

この回答への補足

すみません、大変失礼しました。
EUCも試したつもりだったのですが、もう一度EUCで試してみたところ、ファイル名が問題なく取得できました。

とりあえず、これで回避方法ができたわけですが、できればShift-JISのほうが助かるので、このQ&Aはもう少し開いたままにしておきます。

よく確認せずにすみませんでした。

補足日時:2007/11/21 16:30
    • good
    • 0

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