
サーバー環境
Win2000
Apache/2.0.55
PHP Version 4.4.1
MySQL Version 3.23.49 (SJIS)
php.iniの設定
magic_quotes_gpc=Off
mbstring.http_input=auto
mbstring.http_output=SJIS
mbstring.internal_encoding=SJIS
にて運用しています。
携帯での利用を考慮して、SJISでの運用が必要であったため、EUC-JPへの変更は考えていません。
能などの「文字化け文字」の表示は、addslashes,stripslashes等で処理しており問題はありません。
今回、ファイル送信<input type=file name=userfile>のファイル送信での\の処理についてお聞きしたく質問しました。
過去の例にも挙げられていますが、可能性などの文字は、SJIS環境で送信すると、可能\性と表示されます。表示は、stripslashesで\をとればいいと思いますが、上記のinput type=fileでファイルを指定すると
C:\MyDocument\可能性.doc は
D:\MyDocument\可能\性.doc となってしまい、パスと判断され
フォームの送信後の $userfile_nameでは、「性.doc」となってしまいます。
現在のサーバー環境を変えることで大きな影響がでるのは、できるだけ避けたいです。
なにかよい意見がございましたら、ご教授ください。よろしくお願いします。
No.2ベストアンサー
- 回答日時:
いろいろ調べて以下のサンプルプログラムを作ってみました
accept-charsetでformの文字コードを変えて送信できます
ただIEでは表示ページの文字コードに存在しない文字がないとaccept-charsetを使用しないようです。そのためにダミーのパラメータを使っています。
IE6とFireFox,Mozilla1.7では大丈夫でした。
<?php
header("Content-type: text/html; charset=Shif_JIS");
echo mb_convert_encoding($_FILES['userfile']['name'], "sjis", "utf-8");
?>
<form enctype="multipart/form-data" action="" method="POST" accept-charset="utf-8">
<input type="hidden" name="dummy" value="�"><!-- IEにaccept-charsetを理解させるおまじない(^^) -->
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
他の案も考えましたが、非常に影響が大きかったため、php504さんの意見を参考にスクリプトを作り直しましたところ、うまくいきました。
どうもありがとうございました。
出張&土日休みで返答が遅れましたことお詫びします。
No.3
- 回答日時:
興味があったので色々調べてみました。
参考URLのスレッドを読んでみてください。
質問者様の悩みと同じだと思います。
そのスレッドのNo12577のプログラムを若干修正して使えば
綺麗にファイル名を取得することができましたよ(^-^
(質問者様と同じ設定[php.ini]にして実験してみました)
アップロードされたファイルの中身を見るときはtmp_fileを開くと思いますが・・・
ちなみに~
私も携帯サイトを作っていますが、
mbstring.internal_encoding=EUC-JP
としてあります。
mbstring.http_output=SJIS
で表示はSJIS出力になりますので、携帯でも問題なしですよ。。
プログラムをEUC-JPで書くだけです。
では~
参考URL:http://ns1.php.gr.jp/pipermail/php-users/2003-Ja …
返答ありがとうございました。
ただ、mbstring.internal_encoding=EUC-JP とすると、
その他の数百のスクリプトがSJISで書かれているため影響が大であると考え、php504さんの案を採用しました。
今後、新規で作成するときは、参考にさせていただきます。
どうもありがとうございました。
No.1
- 回答日時:
ファイル名に\は使えないことになっているのでしょうがないですね。
PHP3はファイル名がフルパスで取得できたと思うのでPHP3にして自分で工夫するか(\の前の文字が0x80以上だったらその前の\までをファイル名に追加というのを繰り返す)
または携帯でアップロード可能な機種は限られているのでそこだけEUCにしてしまう(自信ないですがアップロード可能な携帯はEUCが使えたような)
この回答への補足
現在のところ、PCでのブラウザでの運用ですので、
>そこだけEUCにしてしまう
というのもありかもしれません。
ただ、プログラムをSJISからEUCに変換したとしても送信時には
mbstring.http_input=auto
mbstring.http_output=SJIS
mbstring.internal_encoding=SJIS
これらの設定は、支障になることはないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP どうして送信されないのでしょうか? 1 2022/12/09 05:23
- Visual Basic(VBA) Selenium Basicの件 5 2023/04/10 20:55
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
smartyでチェックボックスをチ...
-
PHP POSTした$_FILESの値が正し...
-
phpのswitch文
-
【PHPチェック】ラジオボタンが...
-
phpの掲示板で新しい順に表...
-
画像ボタンをクリックした時の...
-
チェックボックスの値に応じてP...
-
リストボックス 複数選択のデ...
-
アップロードの際にファイルパス
-
検索時の選択内容を保持する方法
-
phpでチェックボックスでの値の...
-
チェックボックスの初期選択と...
-
PHPでの”能”などの文字化け(フ...
-
チェックボックスのGETでの受け...
-
チェックボックスで選択したも...
-
POSTデータのNAME属性をVALUEに...
-
【PHP】 文字サイズの変更につ...
-
HTMLのリンクをクリックするこ...
-
チェックボックスの必須項目指定
-
PHPで画像の渡しが上手く行きま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
HTMLで前の画面に戻る時、入力...
-
検索時の選択内容を保持する方法
-
<input type="hidden" >で配列...
-
フォームへの前回入力値をクリ...
-
PHP ボタンが押されたら処理を...
-
DBの値をチェックボックスに反...
-
パラメーターを隠す
-
【PHPチェック】ラジオボタンが...
-
PHPで画像の渡しが上手く行きま...
-
テキストボックスに初期値を入れる
-
ラジオボタンをsessionで使いたい
-
ラジオボタンを押すと、表示が...
-
入力フォーム→確認画面→送信画...
-
PHPの関数実行
-
PHPで、ボタンを押すと同じペー...
-
画面が更新されてもチェックボ...
-
HTMLフォームで複数選択のチェ...
-
<input type='checkbox'>要素で...
-
同じページでフォームデータを...
-
$_SESSIONについて教えて下さい。
おすすめ情報