• ベストアンサー

CGI::Liteでファイルのアップロード

Perl5.8でCGI::Liteを使ってファイルのアップロードをするつもりですが、ファイル名が日本語の場合とファイルの中身が文字化けして保存されています。 文字コードはutf8で統一させているのですが、 例えば、テスト.txtというファイルで中身がEUC-JPのファイルをアップロードしてもアップロード先でファイル名が化けずに中身もEUC-JPで保存されるようにしたいのですが、どういう関数を施せば良いでしょうか? CGI::Liteに変わる他のモジュールでもあるのでしょうか?

  • Perl
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

アップロードそのものはCGI::Liteで問題ないと考えます。 問題はファイル名を変換していないところでしょう。 「jcode.pl」で変換すれば解決するはずです。

関連するQ&A

  • ファイルのアップロード Perl5.8

    ファイルのアップロードでCGI::Liteを使っています。 PerlはActivePerlのバージョン5.8ですが アップロード先のデータの中身が変わってしまい、 画像データなのに別のファイルになって表示されなくなりました。 これはファイル自体の文字コード変換が絡んでいるということですか? また、CGIとCGI::Liteの違いですが、両方使ってもよいのでしょうか?

    • ベストアンサー
    • Perl
  • [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"; 以上、よろしくお願いします。

    • 締切済み
    • CGI
  • CGI_lite.pmを使ったファイルのアップロード

    CGI_lite.pmを使いファイルをアップロードしたところちゃんとファイル自体はアップロードできているのですがファイル名が変わってしまっています。 たとえば「index.html」というファイル名ならば「980815043__index.html」と なってしまいます。 サーバーはunixです。 どうか詳しい方教えてください。お願いします。

    • ベストアンサー
    • CGI
  • Perlの文字コードを意識したファイルの読み込み方

    perl5.8でファイルを読み込む場合、文字コードを意識した以下のような呼び方("<:euc-jp")があるのですが この方法で読み込んだ$datの中身はperlの内部コード(UTF8)になっているということでしょうか? それとも、普通に("<")で読み込んで$dat = Encode::decode("euc-jp", $dat);とすべきでしょうか? use utf8; use Encode; my $fname = "test.txt"; # 文字コードがEUC-JP my $dat = ""; open(IN, "<:euc-jp", "$fname) or die "open error!"; flock(IN, 2); while(<IN>){ $dat .= $_; } close(IN);

    • ベストアンサー
    • Perl
  • CGI のモジュールをつかってファイルのアップロード

    use CGI qw(:standard); use File::Basename; $upimg1_pm = param('upimg1'); while (read($upimg1_pm, $buffer, 2048)) { $file .= $buffer; } $FileName = basename($upimg1_pm, ""); open UP,"> $img_dir/$FileName"; binmode UP; print UP $file; close UP; 上のようにファイルのアップロードのプログラムを書いたのですが、実際アップロードしたら C:\Documents and Settings\~top.gif のようにWindowsのローカルパスがそのままファイル名としてアップロードされてしまいました。 basenameはファイル名をとるモジュールときいていたのですがなぜこうなるのでしょうか? おそれいりますがご教授おねがいします。 もしかしてFile::Basename;のモジュールがないとか・・・ Perl5です。

    • ベストアンサー
    • CGI
  • ブラウザ上でファイルをアップロードさせるCGIでファイル名を指定

    http://www.tohoho-web.com/cgi/wwwupl2.txt ↑このCGIを利用して、ファイルのアップロードが出来るようになったのですが、アップロードされたファイル名をこちらで指定したファイル名に変更させることは出来ますか? 例えば10個のファイルをアップロードした場合、001.jpg、002.jpg、.....010.jpgというように。 アップロードされたファイルをフラッシュで読み込みたいというのが目的です。

    • 締切済み
    • CGI
  • CGIで日本語名ファイルのアップロード

    日本語名のファイルをアップロードするCGIを教えて下さい。 下記ページを参考にさせていただいて、半角のファイル名はアップロードできております。 http://www.harukaze.net/~mishima/perl/module/upload_by_CGI_pm.html よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • Perlの文字コード

    1-2年ほど前、Perl5.8でソース自体をUTF8N(LF)で記述するようになり、 以下のように書いていました。 use utf8; use encoding "utf8"; use Encoding; それからPHPに移り、PHPでは、ソースはEUC-JP、DBもEUC、HTMLに出力する際もEUC-JPで統一していました。 最近またperlを使い出して疑問に思ったのですが、 perlではどのような文字コードで統一すれば一番よいのかということです。 javascriptはUTFだと動作しない端末(ザウルス)などあり、 perlもEUC-JPで統一しようと考えています。 昔、UTF8にこだわったのは、おそらく 「構」という文字は5Cなので、 文字コードによる不具合(ソース,js,cssで)を避けるためと、流行のUTF8にしたと思います。 perlでEUC-JPで文字コード統一させるメリットデメリットが知りたいです。 最近perlで書かれたサイトでHTML出力がShift_JISだったのですが、perlソースもシフトJISかは知りませんが、Shift_JISで統一するデメリットが知りたいです。 あと、WEBでどの文字コードが現在主流で、今後どうなるかも知りたいです。 EUC-JPで安泰なら、話は早いですが・・・

    • ベストアンサー
    • Perl
  • EUCファイルの扱い方?

    EUCファイルの扱い方について悩んでいます。 例えば sample.html(EUC文字、LF改行)を、エディターを使いEUCで開いて,その後保存する時、閉じマーク×や、上書き保存、あるいは自動選択(文字コード)で保存すると元の(EUC文字、LF改行)で保存されるでしょうか?使用しているPCによりますか?それから、開いたファイルに、名前を付けて保存を選択すると、ファイルの種類の選択窓に自動的に表示されますが(そのファイルの拡張子と同じ名)、sample.htmlをHTML文書で保存するのと、txtファイルとして保存するのでは、どこか違うのでしょうか?ちなみにCGIスクリプト用はファイル名をsample.htmlとしてtxtファイルで保存しないとエラーが出るようなきがするのですが・・・。よろしくお願いします。

    • ベストアンサー
    • CGI
  • CGI_Lite.pmは,Perl6.5.1 で使えますか?

     私は初心者です。本を見ながら付属CDに入っていた掲示板セットをアップロードしましたが正常に動作しませんでした。いろいろ試行錯誤をした結果、どうやら「CGI_Lite.pm」というものが原因らしく、それはPerlのバージョン4では使えないということまでは知りました。  私のアップロードしているレンタルサーバのバージョンは6.5.1ですが、「CGI_Lite.pm」は機能しないのでしょうか?初心者故に的外れな質問かもしれませんが、どうか宜しくお願い致します。

    • ベストアンサー
    • Perl

専門家に質問してみよう