いつもお世話になっております。
アップロードしたファイルから
$_FILES['userfile']['name'];で、アップしたファイル名を取得しようとするときにファイル名に
特定(後半1バイトが'5C')の漢字を含むとPHPが、'\'と誤認して該当の文字から前を消して表示してきます。
例えば、「内部構造.txt」は、「造.txt」に化けます。move_uploaded_file関数で、アップしたファイルをどこかに保存しようにも、ファイル名が正しく指定できません。
どなたか、対策方法をご教授頂けませんでしょうか?
よろしくお願いいたします。
<?
mb_internal_encoding("EUC");
echo "userfile_name is ".$_FILES['userfile']['name'];
echo "<br>";
echo "userfile_type is ".$_FILES['userfile']['type'];
echo "<br>";
echo "MAX_FILE_SIZE is ".$_POST["MAX_FILE_SIZE"];
echo "<br>";
echo "userfile_tmp_name is ".$_FILES['userfile']['tmp_name'];
echo "<br>";
echo "userfile_error is ".$_FILES['userfile']['error'];
echo "<br>";
echo "userfile_size is ".$_FILES['userfile']['size'];
echo "<br>";
$dir="c:/work/";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $dir.$_FILES['userfile']['name'])) {
print "File is valid, and was successfully uploaded. ";
}
else
print("UPLOAD ERROR!!");
?>
No.1ベストアンサー
- 回答日時:
Unix系のユーザーかとおもったら、
>$dir="c:/work/";
を見ると、Windowsユーザーですね。
全角文字を使ってファイルを保存したいのなら、
move_uploaded_fileに渡すファイル名をSJISに変換してあげましょう。
mb_convert_encoding($_FILES['userfile']['name'],'SJIS')、みたいに。
ファイル処理は、OSの規則に沿ってください。
\(5C)の問題は、PHPのバージョンにもよりますが、
>echo "userfile_name is ".$_FILES['userfile']['name'];
これで、何が表示されていますか?
EUCできちんと表示されている気がしますが、どうなんでしょ?
まずは、最初の問題をクリアしてください。
この回答への補足
kotaron さん 早速の回答ありがとうございます。
ご推察の通り、環境は、WinXPです。
さて、ご指摘の>echo "userfile_name is ".$_FILES['userfile']['name'];
ですが、ファイル名は、この時点で、既に化けています。通常のPOSTでの変数引渡しは、問題なく引き継がれます。<input type=file >を$_FILES[]で受け取る場合のみこの問題が起こるようです。ほとほと困っています。
No.5
- 回答日時:
こんにちは。
バックアップかなにかの用途に使うのでしょうか。外部公開というのであれば、日本語OKにしてしまうとクラッキングもされやすいので、気をつけてください。
で、本題に。環境によって違うかもしれませんね。私の場合もXPなのですが、日本語ファイルをアップするとプログラム中では、正常に扱えるのですが、mb_convert_encoding関数で保存すると日本語の部分が半角カタカナになってしまいました・・・
お使いのWebサーバはApacheでしょうか。ApacheでもApache2とか・・・。
PHPも5ではないでしょうか。
なんか話しをみてると、PHPに渡される前に既にファイル名がおかしくなっているような気がします。
以下で実験してみてください。
----------- enc.php 中身 --------------------------------------------
<Form Action="./enc.php" method="POST" enctype="multipart/form-data">
<input type="file" name="userfile">
<input type="submit" value="send">
</Form>
<?
print_r($_FILES);
?>
---------- ここまで ------------------------------------------------
No.4
- 回答日時:
間違えましたaddslashes()で\(5C)をクオートしてください
内部構\造.txt にしてあげると幸せになれます
参考URL:http://jp.php.net/manual/ja/function.addslashes. …
No.3
- 回答日時:
stripslashes()関数とか使ってください
日本語環境()だと「\」で表示されますが本当は「\」バックスラッシュの半角と同意であり、文字コードも同じ「5C」です
参考URL:http://jp.php.net/manual/ja/function.stripslashe …
No.2
- 回答日時:
前の方の言うように、文字コードを変換してから参照/出力することが肝要。
mb_internal_encoding("EUC-JP");
mb_detect_order("ASCII,JIS,UTF-8,EUC-JP,SJIS");
$_FILES['userfile']['name']=mb_convert_encoding($_FILES['userfile']['name'],"EUC-JP",mb_detect_encoding($_FILES['userfile']['name']));
※$_FILESの値を直接変更するのは避けた方がいいかも。
で、どう?
あと、PHPファイル自体の文字コードと、<?php~?>をきちんとしたHTML(METAタグで文字コードが指定されたHTML)で囲んでいることを確認してください。php.iniの方も大丈夫ですよね?
この回答への補足
質問の意図が正しく伝わっていないようです。
アップするファイル名は「端末構造解析.txt」です。
受け側のプログラムで、
echo $_FILES['userfile']['name']; とすると、
「造解析.txt」と表示します。構の字(8D5C)の後ろ
1バイト5Cが原因で、ファイル名前半が飛んでいるようです。圭(8C5C)噂(895C)でも同様の現象が起こります。この字を含まない漢字ファイル名は、なんの問題もありません。
magic_quotes_gpc = Off も stripslashes()も試しましたが、効果がありませんでした。困ってしまいました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP 画像が表示出来ません。 1 2023/02/02 16:30
- PHP $filePath = './user_img/' . $file['name'];? 1 2022/12/10 07:29
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
このQ&Aを見た人はこんなQ&Aも見ています
-
【お題】NEW演歌
【大喜利】 若い人に向けたことは分かるけど、それはちょっと寄せ過ぎて変になってないか?と思った演歌の歌詞
-
これ何て呼びますか
あなたのお住いの地域で、これ、何て呼びますか?
-
土曜の昼、学校帰りの昼メシの思い出
週休2日が当たり前の今では懐かしい思い出ですが、昔は土曜日も午前中まで学校や会社がある「半ドン」で、いつもよりちょっと早く家に帰って食べる昼ご飯が、なんだかちょっと特別に感じたものです。
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
ギリギリ行けるお一人様のライン
おひとり様需要が増えているというニュースも耳にしますが、 あなたが「ギリギリ一人でも行ける!」という場所や行為を教えてください
-
ファイルのアップロードで、ファイル名が文字化けして困っています
PHP
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA で、スペースを含むファイ...
-
Flaskでサーバー立ち上げに関して
-
MySQL,PHPのリロードによる二重...
-
アップロードしたファイルの絶...
-
【PHP】複数語検索について
-
HTMLで前の画面に戻る時、入力...
-
チェックボックスのvalueに変数...
-
フォームへの前回入力値をクリ...
-
<input type="hidden" >で配列...
-
パラメーターを隠す
-
PHPで画像の渡しが上手く行きま...
-
入力フォーム→確認画面→送信画...
-
フォームのテキストボックスに...
-
PHPでファイルアップロード時に...
-
<select>文、foreachと初期値設定
-
smartyでチェックボックスをチ...
-
PHPで郵便番号を検索し、住所を...
-
Smartyで、セレクトボックスが...
-
phpのカウンタのリセット方法
-
phpでのセレクトボックスの値を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA で、スペースを含むファイ...
-
Flaskでサーバー立ち上げに関して
-
PHPからHTMLへの変数の受け...
-
PHP データベース データ更新
-
phpで変数を使ってcopyできない
-
POSTの項目に追加
-
phpで掲示板を作りたい
-
重複を防ぐ記述について教えて...
-
php、sqlite3にデーター追加で...
-
プログラミングC++のmapについて
-
CakePHP テーブル名カラム名の...
-
変数のパターン処理パート3
-
fputcsv()で1レコード1行になる...
-
アップロードファイル名の文字化け
-
openCVのトラックバーについて
-
$_SESSIONに渡した後はそのまま...
-
php で画面にコードが表示され...
-
引数の参照について
-
PHP5でRSS1.0のネームスペース...
-
scanfでの読み込み文字数制限
おすすめ情報