こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

[Perl] CGI_Lite.pmでファイル名取得できない

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/Lite.pm
(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";



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

投稿日時 - 2007-11-21 13:10:47

QNo.3535792

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

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

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

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

デバッグのときなんかはいろいろ見落としがちですからね。
謝るこたないですよ♪

投稿日時 - 2007-11-22 01:45:03

お礼

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

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

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

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

投稿日時 - 2007-11-22 16:30:39

ANo.1

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

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

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

投稿日時 - 2007-11-21 14:22:30

補足

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

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

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

投稿日時 - 2007-11-21 16:30:15

あなたにオススメの質問