• 締切済み

日本語を含むファイルへの「copy」処理

お世話になります。 現在perlにてプログラムを作っているのですが、ファイルのコピーに関してつまずいたので教えていただけますでしょうか。 formからファイルが選択されてそれが、$inputに入っているとします。 そのファイル「file」という名前でそのままコピーしたいと考えています。 そこで copy("$input", "file"); としました。 ですが、選択したファイル場所に日本語が含まれているとエラーになっているようで処理がされません。 ちなみに、日本語が含まれていないファイルに関しては問題なく動作しております。 URLエンコードが必要のようですが、いろいろ調べてもうまくいかなかったので質問をさせていただきました。 処理の前に$inputをどのようにすればいいのでしょうか。 教えていただけますでしょうか。 よろしくお願いします。

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

みんなの回答

回答No.3

ファイル名の文字コード(通常はOSの標準文字コードと一致するので、Windowsならsjis、Linuxならeuc)と、 "$input"に入っている文字列の文字コードを統一させて下さい。 HTMLフォームから送信されたデータは、殆どの場合、HTMLファイルの文字コードが使われます。 HTMLフォームを使って送信すると、ブラウザが自動的にURLエンコードしますので、 CGIはそれをURLデコードした後で、文字コードを変換して下さい。 URLデコードの処理はCGI.pmが、文字コードの変換はEncode.pmが使いやすいと思います。

  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.2

これってローカルでの話ですよね。そしてMSIEを使っている。 だからたまたまコピーできるだけであって、ブラウザがMSIE以外だったり、リモートのファイルの場合はこの方法ではファイルコピーはできません。 MSIE以外は type属性値「file」の input にパスは入らないです。

  • MoguraSE
  • ベストアンサー率64% (81/126)
回答No.1

こんにちは。 まず、文字コードを統一してください。 日本語はJIS、Shift-JIS、EUC、UTF-8などの文字コードが散在します。 Jcodeモジュールなどで先に変換を済ませてください。 そうでないと、URLエンコードしても正常に動作しません。 次にURLエンコード/デコードですが、解説サイトがありますのでそちらを参考にしてください。 http://sonic64.com/2003-08-31.html

参考URL:
http://sonic64.com/2003-08-31.html
xHELP_MEx
質問者

お礼

お早いご回答まことにありがとうございます。 文字コードの統一はしていますが、 HTMLの出力時などに統一のものを吐くようにするなどで統一していますがそれで十分でしょうか。 また、教えていただいたサイトは確認していたのですがこれにかけてもうまく動作しませんでした。 具体的な構造がわからないのですが、これにかけるとファイル名が C%3a%5cDocuments+and+Settings%5c0000%5c%e3%83%87%e3%82%b9%e3%82%af%e3%83%88%e3%83%83%e3%83%97%5c3%2ejpg のようになってしまいますが、これで正常なのでしょうか。 ※上のを解析?すれば私のフォルダ構成がわかると思いますが解析しないでくれるとうれしいですw

関連するQ&A

  • PHPのGETとPOSTの処理を学習中なのですが、valueに日本語が

    PHPのGETとPOSTの処理を学習中なのですが、valueに日本語が入力されていた場合の処理について分からない点があります。 POSTやGETから送信された日本語の値がどの時点で再び日本語に変換されているのかということです。 たとえば以下のようなphpファイルにブラウザからアクセスした場合、 <?php $static = $_GET["static"]; print $static; ?> <form method="GET"> <textarea name="static"> 静的 </textarea> <input type="submit" name="submit_button" value=" 送 信 " /> </form> ブラウザのアドレスバーには"?static=静的%0D%0A&submit_button=+送+信+"という文字列が表示されています。 この"%0D%0"というのは、URLエンコードされた文字列らしいのですが、上記のphpファイル上の"print $static;"部分の表示ではしっかりと日本語として表示されています。 私は上記のソース上のどこの部分でURLエンコードされた文字列が再び日本語として表示されるよう変換されているか分かりません。 何卒ご教授頂けますようお願い致します。

    • ベストアンサー
    • PHP
  • 同じファイル内で、アップロードとアップロードされたファイルの処理をすることについて

    OS:Window XP Pro 開発環境:Xampp(Apache + PHP + Mysql) 現在ファイルをアップロードする処理を書いているのですが、 この処理を 1)a.phpでファイルをアップロードする処理 2)b.phpでアップロードされたファイルの処理 と分けて、コーディングするのではなく 1)a.php内にファイルをアップロードする処理とアップロードされたファイルの処理を一緒に記述する という風にできないかと思いましたので、 以下のようなコードを書いたのですが $_FILES['upload_file']['tmp_name']) の値を調べてみたところ、なんの値も 入っていなかったことから このコードでは、二つの処理を一つのファイル内に書くことが でいないようでした。 どうにかしてひとつのファイル内に この二つの処理を同居させることはできないのでしょうか? a.php --------------------------------------- switch($action) { case "update": if(is_uploaded_file($_FILES['upload_file']['tmp_name'])) { $upload_file = $_FILES['upload_file']['tmp_name']); if(file_exists(dirname(__FILE__)."/profile_phote/") == TRUE) { $phote_name = dirname(__FILE__)."/profile_phote/".$upload_file; } else { mkdir(dirname(__FILE__)."/profile_phote/"); $phote_name = dirname(__FILE__)."/profile_phote/".$upload_file; } move_uploaded_file($_FILES['upload_file']['tmp_name'],$phote_name); "リダイレクト処理・・・" case ... case ... default: <form name="profile" action="" method="post"> <input type="file" name="upfile"> <input type="hidden" name="action" value="update"> </form> }

    • ベストアンサー
    • PHP
  • ファイルアップローダーで送信するファイルを保存する際にファイル名に自動でURLパラメーターを入れ込む方法を教えてください。

    phpの超初心者です。 phpでファイルをブラウザ上でアップロードするシステム でかつ、 アップロード用のURLにhttp://www.hogehoge.com/up.php?no=1234などのパラメーターを付けてアップロードするファイルを「1234.jpg」という名前で保存するものが必要になり色々調べました。 以下の方法だとアップロードしたファイル名が「.jpg」になってしまいます。 $count_fileに単純な文字列、'image'などを入れるとちゃんと「image.jpg」としてアップロードできます。 <form action="<?= $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data"> <p><input type="file" name="data" /> <input type="submit" value="アップロード"></p> </form> <?php $updir = "./data"; $tmp_file = @$_FILES['data']['tmp_name']; $count_file = $_GET['no']; @list($file_name,$file_type) = explode(".",@$_FILES['data']['name']); $copy_file = $count_file . "." . $file_type; move_uploaded_file($tmp_file,"$updir/$copy_file"); ?> パラメーターなどの環境変数をファイル名に入れ込むにはどうしたらよいのでしょうか?調べ方が悪いのか、検索しまくってもわからなくて困っています。 どなたかご教授いただけませんでしょうか?

    • ベストアンサー
    • PHP
  • ファイルの転送。

    <Form>内、<Input type="file">タグにてファイルを転送し。それをPerlで受け取って、保存しようと思っています。保存する主なファイルは画像ファイルです。 前に立てたレスにて、cgi-lib.plを使用すると楽との指摘を受けました。 こちらでいろいろ調べてみましたが、ファイル転送を日本語で解説しているページが見つかりません。 参考にしたページはこちらです。 http://www.futomi.com/lecture/form/cgilib.html これだと<Input type="text">などの内容の取得方法はわかりますが。<Input type="file">の内容の取得方法がわからないのです。 残念なことなのですが、cgi-lib.plのソースコードに記載されている解説を見ても、私がまったく英語が読めない故に使用方法は分かりませんでした。 そこで、chi-lib.plでのファイルの内容を保存するまでの解説つきサンプルコード・cgi-lib.plでのファイルの転送を解説している日本語のページどちらかを教えていただきたく思います。 また、cgi-lib.plと比較し、CGI.pmも同等の機能を保有しているように見て取れるのですが、やはりperlの推奨している通り.plより.pmを使用したほうがよいのでしょうか? 分かる方がいらっしゃいましたら、この辺りのことについても教えていただきたく思います。 なにぶん、ファイル転送は初の試みゆえにいろいろと覚えることが多く大変です。分かりやすい解説をお願いします。

    • ベストアンサー
    • Perl
  • PHPです。日本語はどのようにしたらつかえるのでしょうか

    英語では期待通り動くのですが、日本語では期待通り動きません。 なぜですか。 form.html <html> <head>フォーム</head> <body> <form action="henkan.php" method="post"> 文章<input type="text" name="UKETORI"><br> <input type="submit" value="送信"><br> </form> </body> </html> henkan.php <html> <body> <?php $uketori=$_POST['UKETORI']; $uketori=str_replace("です。","だよん。", $uketori); print "$uketori"; ?> </body> </html> 日本語を変換したい場合はエンコードとか必要なのでしょうか。 やり方がわかりません。宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • jQueryでファイルアップロード

    お世話になります。 jQueryでファイルアップロードの処理をしたいのですがやり方を教えて下さい。 Googleで検索すると色んなプラグインが出てくるのですが全体像がわからない為上手く動作してくれません。 やりたいのは、入力画面-->確認画面-->結果確認画面と遷移させてファイルをアップロードする処理です。 <画面仕様> (1)入力画面 ・氏名等の入力とアップロードするファイルの選択 ・アップロードファイルサイズのチェック (2)確認画面 ・入力画面で入力した内容の確認 ・アップロードするファイルの確認(個数、合計サイズ) (3)結果確認画面 ・アップロード処理結果の確認 ※実際のアップロードが入力画面でファイルを選択した直後に行われても構わない 嵌っているのは、入力画面でFORMのonsubmitと<input type="file">の両方を同時に設定できない事です。 FORMのonsubmitでは入力内容のチェックを、<input type="file">ではファイルのアップロードを行い、アップロードしたファイル名を隠しフィールドで確認画面に送りたいのですが、個々に指定するとそれなりに動くのに両方指定するとsubmitが優先されてしまい、<input type="file">のchengeイベントが動きません。 どうしたら良いかご教示下さい。 中途半端なソースですが、入力画面で私がやりたいことをコードにしてみました。 よろしくお願いします。 $(function() { $('#fileId').change(function() { $(this).upload('upload.php', function(res) { $(res).insertAfter(this); }, 'html'); }); }); <form id="form1" name="form1" action="confirm.php" method="post" enctype="multipart/form-data" onsubmit="return error_check();"> <input type="file" name="upload_file1" id="fileId" />

  • ファイル選択と同時にアップロード HTML+JS

    HTMLとJava Scriptのことを質問させてください <form>タグからファイルを選択すると同時をアップロードしたいと思っています。 複数の「ファイルを選択ボタン」を設置し、それぞれ"001.jpg"、"002.jpg"など指定の名前でアップロードしたいです。 下記のようにいくつかの<form>タグを設置し、javascriptでコントロールできるかと思いケース1のように書いた場合はうまくいったのですが、ケース2のように複数並べて記述した場合、動かなくなり困っております。 どなたか教えていただけないでしょうか? よろしくお願いいたします ケース1) <form id="upload_file1" action="file_upload.php" method="post" enctype="multipart/form-data" target="upload_frame">    <input type="hidden" name="picture_id" value="001.jpg" />    <input type="file" id="file_id_1" name="file_name" accept="image/jpeg"> </form> <form id="upload_file2" action="file_upload.php" method="post" enctype="multipart/form-data" target="upload_frame">    <input type="hidden" name="picture_id" value="002.jpg" />    <input type="file" id="file_id_2" name="file_name" accept="image/jpeg"> </form> <script> var form = document.getElementById("upload_file1"); var input = form.file_name; input.onchange = function (){ if(this.value){ form.submit(); } }; </script> ケース2) <form id="upload_file1" action="file_upload.php" method="post" enctype="multipart/form-data" target="upload_frame">    <input type="hidden" name="picture_id" value="001.jpg" />    <input type="file" id="file_id_1" name="file_name" accept="image/jpeg"> </form> <form id="upload_file2" action="file_upload.php" method="post" enctype="multipart/form-data" target="upload_frame">    <input type="hidden" name="picture_id" value="002.jpg" />    <input type="file" id="file_id_2" name="file_name" accept="image/jpeg"> </form> <script> var form = document.getElementById("upload_file1"); var input = form.file_name; input.onchange = function (){ if(this.value){ form.submit(); } }; var form = document.getElementById("upload_file2"); var input = form.file_name; input.onchange = function (){ if(this.value){ form.submit(); } }; </script>

  • ファイル選択ダイアログでファイルの種類を指定する方法

    下記のプログラムでファイル選択のダイアログを表示しますが 【ファイルの種類】をデフォルトでCSVの指定はできますか? よろしくお願いします。 <html> <body> <form enctype="multipart/form-data" action = "test_02.php" method = "post" > <input type="file" name="file_data1"> <input type="submit" name="FILE送信" value="FILE送信"> </form> </body> </html>

    • ベストアンサー
    • HTML
  • copyをしたときの最終更新時間

    WindowsXP+cygwinでPerlを使用して、2つのファイルを同期するソフトを練習の為に作っています。ファイルAとファイルBの最終更新時間をstat関数で調べてFile::Copyモジュールのcopy関数でコピーする方法で作っています。ファイルAの方が古い状態で同期を実行すると、その内容がファイルBに上書きされますが、ファイルBの最終更新時間がファイルAと同じ時間ではなくて、copyを実行した時間になってしまいます。copyをした後で、ファイルBの最終更新時間をファイルAと同じにする方法はあるのでしょうか。ご存じの方、いらっしゃいましたらお教えください。よろしくお願いします。

    • ベストアンサー
    • Perl
  • 日本語URLへの移動

    Perl、CGI初心者です。 HTMLのフォームの選択結果を元にURLを生成し、 そのURLへアクセスするプログラムを作成しています。 URLはPDFファイルやWordファイルになり、URL(ファイル名)には 日本語が含まれています。 print "Location: $URL\n\n";としてURLへ移動するプログラムを 作成したのですが、日本語処理がうまくいっていない(?)ようで Not Foundとなってしまいます。 なお、NotFoundが表示された状態でブラウザ(IE6)の移動を押下すると テキストとしてPDFやWordファイルを開きます。 #NotFoundの時点ではブラウザの文字コードがISOになっています。 $URL =~ tr/+/ /; $URL =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1) )/ge; &jcode'convert( *value, 'sjis' ); と日本語処理はしています。 また、ファイルを開くのではなく、以下のようにリンクを貼った場合は、 リンク先は正しく開くことができます。 <a href="$URL" target="_blank">$URL<a><br> 原因、対策を教えて下さい。

    • ベストアンサー
    • Perl